ZGlmZiAtLWdpdCBhL01BS0VBTEwgYi9NQUtFQUxMCmluZGV4IDg0MzFiM2UuLjE3NzJhZTMgMTAwNzU1Ci0tLSBhL01BS0VBTEwKKysrIGIvTUFLRUFMTApAQCAtMTU0LDYgKzE1NCw3IEBACiBMSVNUXzc0eHg9IglcCiAJREI2NDM2MAkJREI2NDQ2MAkJRVZCNjQyNjAJUDNHNAkJXAogCXAzbTc0NDgJCVBDSVBQQzIJCVBDSVBQQzYJCVpVTUEJCVwKKwltcGM3NDQ4aHBjMgogIgogCiBMSVNUXzd4eD0iCVwKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggZmVjMTE0Zi4uODZiMTAwNiAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTE3NzMsNiArMTc3Myw5IEBACiBFVkI2NDI2MF83NTBDWF9jb25maWc6CXVuY29uZmlnCiAJQCQoTUtDT05GSUcpIEVWQjY0MjYwIHBwYyA3NHh4Xzd4eCBldmI2NDI2MAogCittcGM3NDQ4aHBjMl9jb25maWc6ICB1bmNvbmZpZworCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyA3NHh4Xzd4eCBtcGM3NDQ4aHBjMgorCiBQM0c0X2NvbmZpZzogdW5jb25maWcKIAlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgNzR4eF83eHggZXZiNjQyNjAKIApkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmluZGV4IDE1NDI4NjQuLjBiYTlmNWIgMTAwNjQ0Ci0tLSBhL1JFQURNRQorKysgYi9SRUFETUUKQEAgLTIzODEsMTcgKzIzODEsMTcgQEAKIAljc2IyNzJfY29uZmlnCQlsd21vbl9jb25maWcJCXNiYzgyNjBfY29uZmlnCiAJQ1U4MjRfY29uZmlnCQlNQlg4NjBUX2NvbmZpZwkJc2JjODU2MF8zM19jb25maWcKIAlEVUVUX0FEU19jb25maWcJCU1CWF9jb25maWcJCXNiYzg1NjBfNjZfY29uZmlnCi0JRUJPTllfY29uZmlnCQlNUEM4MjYwQURTX2NvbmZpZwlTTTg1MF9jb25maWcKLQlFTFBUODYwX2NvbmZpZwkJTVBDODU0MEFEU19jb25maWcJU1BEODIzVFNfY29uZmlnCi0JRVNURUVNMTkyRV9jb25maWcJTVBDODU0MEVWQUxfY29uZmlnCXN0eGdwM19jb25maWcKLQlFVFgwOTRfY29uZmlnCQlNUEM4NTYwQURTX2NvbmZpZwlTWE5JODU1VF9jb25maWcKLQlGQURTODIzX2NvbmZpZwkJTkVUVklBX2NvbmZpZwkJVFFNODIzTF9jb25maWcKLQlGQURTODUwU0FSX2NvbmZpZwlvbWFwMTUxMGlubl9jb25maWcJVFFNODUwTF9jb25maWcKLQlGQURTODYwVF9jb25maWcJCW9tYXAxNjEwaDJfY29uZmlnCVRRTTg1NUxfY29uZmlnCi0JRlBTODUwTF9jb25maWcJCW9tYXAxNjEwaW5uX2NvbmZpZwlUUU04NjBMX2NvbmZpZwotCQkJCW9tYXA1OTEyb3NrX2NvbmZpZwl3YWxudXRfY29uZmlnCi0JCQkJb21hcDI0MjBoNF9jb25maWcJWXVrb244MjIwX2NvbmZpZwotCQkJCQkJCVpQQzE5MDBfY29uZmlnCisJRUJPTllfY29uZmlnCQltcGM3NDQ4aHBjMl9jb25maWcJU004NTBfY29uZmlnCisJRUxQVDg2MF9jb25maWcJCU1QQzgyNjBBRFNfY29uZmlnCVNQRDgyM1RTX2NvbmZpZworCUVTVEVFTTE5MkVfY29uZmlnCU1QQzg1NDBBRFNfY29uZmlnCXN0eGdwM19jb25maWcKKwlFVFgwOTRfY29uZmlnCQlNUEM4NTQwRVZBTF9jb25maWcJU1hOSTg1NVRfY29uZmlnCisJRkFEUzgyM19jb25maWcJCU5NUEM4NTYwQURTX2NvbmZpZwlUUU04MjNMX2NvbmZpZworCUZBRFM4NTBTQVJfY29uZmlnCU5FVFZJQV9jb25maWcJCVRRTTg1MExfY29uZmlnCisJRkFEUzg2MFRfY29uZmlnCQlvbWFwMTUxMGlubl9jb25maWcJVFFNODU1TF9jb25maWcKKwlGUFM4NTBMX2NvbmZpZwkJb21hcDE2MTBoMl9jb25maWcJVFFNODYwTF9jb25maWcKKwkJCQlvbWFwMTYxMGlubl9jb25maWcJd2FsbnV0X2NvbmZpZworCQkJCW9tYXA1OTEyb3NrX2NvbmZpZwlZdWtvbjgyMjBfY29uZmlnCisJCQkJb21hcDI0MjBoNF9jb25maWcJWlBDMTkwMF9jb25maWcKIAogTm90ZTogZm9yIHNvbWUgYm9hcmQgc3BlY2lhbCBjb25maWd1cmF0aW9uIG5hbWVzIG1heSBleGlzdDsgY2hlY2sgaWYKICAgICAgIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGZyb20gdGhlIGJvYXJkIHZlbmRvcjsgZm9yCmRpZmYgLS1naXQgYS9ib2FyZC9tcGM3NDQ4aHBjMi9NYWtlZmlsZSBiL2JvYXJkL21wYzc0NDhocGMyL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzZDc1N2QKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9tcGM3NDQ4aHBjMi9NYWtlZmlsZQpAQCAtMCwwICsxLDUyIEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwMAorIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworCitpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKKworTElCCT0gJChvYmopbGliJChCT0FSRCkuYQorCitDT0JKUwk6PSAkKEJPQVJEKS5vIHRzaTEwOF9pbml0Lm8KK1NPQkpTCTo9IGFzbV9pbml0Lm8KKworU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCisJJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSlMpICQoU09CSlMpCisKK2NsZWFuOgorCXJtIC1mICQoU09CSlMpICQoT0JKUykKKworLlBIT05ZOiBkaXN0Y2xlYW4KK2Rpc3RjbGVhbjoJY2xlYW4KKwlybSAtZiAkKExJQikgY29yZSAqLmJhayAuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKKworc2luY2x1ZGUgKCRvYmopLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9tcGM3NDQ4aHBjMi9hc21faW5pdC5TIGIvYm9hcmQvbXBjNzQ0OGhwYzIvYXNtX2luaXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2E0MGExCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbXBjNzQ0OGhwYzIvYXNtX2luaXQuUwpAQCAtMCwwICsxLDkxOCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNC0wNTsgIFR1bmRyYSBTZW1pY29uZHVjdG9yIENvcnAuCisgKgorICogQWRkZWQgYXV0b21hdGljIGRldGVjdCBvZiBTREMgc2V0dGluZ3MKKyAqIENvcHlyaWdodCAoYykgMjAwNSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogTWFpbnRhaW5lciB0aWUtZmVpLnphbmdAZnJlZXNjYWxlLmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKy8qCisgKiBGSUxFTkFNRTogYXNtX2luaXQucworICoKKyAqIE9yaWdpbmF0b3I6IEFsZXggQm91bmluZQorICoKKyAqIERFU0NSSVBUSU9OOgorICogSW5pdGlhbGl6YXRpb24gY29kZSBmb3IgdGhlIFR1bmRyYSBUc2kxMDggYnJpZGdlIGNoaXAKKyAqCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHZlcnNpb24uaD4KKworI2luY2x1ZGUgPHBwY19hc20udG1wbD4KKyNpbmNsdWRlIDxwcGNfZGVmcy5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKworI2luY2x1ZGUgPHRzaTEwOC5oPgorCisvKgorICogQnVpbGQgQ29uZmlndXJhdGlvbiBPcHRpb25zCisgKi8KKworLyogI2RlZmluZSBESVNBQkxFX1BCTQkJZGlzYWJsZXMgdXNhZ2Ugb2YgUEIgTWFzdGVyICovCisvKiAjZGVmaW5lIFNEQ19IQVJEQ09ERURfSU5JVAljb25maWcgU0RSQU0gY29udHJvbGxlciB3aXRoIGhhcmRjb2RlZCB2YWx1ZXMgKi8KKy8qICNkZWZpbmUgU0RDX0FVVE9QUkVDSF9FTgllbmFibGUgU0RSQU0gYXV0byBwcmVjaGFyZ2UgKi8KKworLyoKKyAqIEhhcmRjb2RlZCBTREMgc2V0dGluZ3MKKyAqLworCisjaWZkZWYgU0RDX0hBUkRDT0RFRF9JTklUCisKKy8qIE1pY3JvbiBNVDlIVEY2NDcyQVktNDBFQTEgOiBVbmJ1ZmZlcmVkLCA1MTJNQiwgNDAwLCBDTDMsIFNpbmdsZSBSYW5rICovCisKKyNkZWZpbmUgVkFMX1NEX1JFRlJFU0gJKDB4NjFBKQorI2RlZmluZSBWQUxfU0RfVElNSU5HCSgweDAzMDgzMzZiKQorI2RlZmluZSBWQUxfU0RfRDBfQ1RSTAkoMHgwNzEwMDAyMSkJLyogYXV0by1wcmVjaGFyZ2UgZGlzYWJsZWQgKi8KKyNkZWZpbmUgVkFMX1NEX0QwX0JBUgkoMHgwRkUwMDAwMCkJLyogNTEyTUIgQCAweDAwMDAwMDAwICovCisjZGVmaW5lIFZBTF9TRF9EMV9DVFJMCSgweDA3MTAwMDIxKQkvKiBhdXRvLXByZWNoYXJnZSBkaXNhYmxlZCAqLworI2RlZmluZSBWQUxfU0RfRDFfQkFSCSgweDBGRTAwMjAwKQkvKiA1MTJNQiBAIDB4MjAwMDAwMDAgKi8KKworI2VuZGlmIC8qIFNEQ19IQVJEQ09ERURfSU5JVCAqLworCisvKgorIENQVSBDb25maWd1cmF0aW9uOgorCisgQ1BVIEFkZHJlc3MgYW5kIERhdGEgUGFyaXR5IGVuYWJsZXMuCisKKyNkZWZpbmUgQ1BVX0FQCisjZGVmaW5lIENQVV9EUAorKi8KKworLyoKKyAqIE1hY3JvcworICogISEhIEF0dGVudGlvbiAhISEgTWFjcm9zIExPQURfUFRSLCBMT0FEX1UzMiBhbmQgTE9BRF9NRU0gZGVmaW5lZCBiZWxvdyBhcmUKKyAqIGV4cGVjdGVkIHRvIHdvcmsgY29ycmVjdGx5IGZvciB0aGUgQ1NSIHNwYWNlIHdpdGhpbiAzMktCIHJhbmdlLgorICoKKyAqIExPQURfUFRSIGFuZCBMT0FEX1UzMiAtIGxvYWQgc3BlY2lmaWVkIHJlZ2lzdGVyIHdpdGggYSAzMiBiaXQgY29uc3RhbnQuCisgKiBUaGVzZSBtYWNyb3MgYXJlIGFic29sdXRlbHkgaWRlbnRpY2FsIGV4Y2VwdCB0aGVpciBuYW1lcy4gVGhpcyBkaWZmZXJlbmNlCisgKiBpcyBwcm92aWRlZCBpbnRlbnRpb25hbGx5IGZvciBiZXR0ZXIgcmVhZGFibGUgY29kZS4KKyAqLworCisjZGVmaW5lIExPQURfUFRSKHJlZyxjb25zdDMyKSBcCisJYWRkaXMgcmVnLHIwLGNvbnN0MzJAaDsgb3JpIHJlZyxyZWcsY29uc3QzMkBsCisKKyNkZWZpbmUgTE9BRF9VMzIocmVnLGNvbnN0MzIpIFwKKwlhZGRpcyByZWcscjAsY29uc3QzMkBoOyBvcmkgcmVnLHJlZyxjb25zdDMyQGwKKworLyogTE9BRE1FTSBpbml0aWFsaXplcyBhIHJlZ2lzdGVyIHdpdGggdGhlIGNvbnRlbnRzIG9mIGEgc3BlY2lmaWVkIDMyLWJpdAorICogbWVtb3J5IGxvY2F0aW9uLCB1c3VhbGx5IGEgQ1NSIHZhbHVlLgorICovCisKKyNkZWZpbmUgTE9BRF9NRU0ocmVnLGFkZHIzMikgXAorCWFkZGlzIHJlZyxyMCxhZGRyMzJAaGE7IGx3eiByZWcsYWRkcjMyQGwocmVnKQorCisjaWZuZGVmIFNEQ19IQVJEQ09ERURfSU5JVAorc2RjX2Nsa19zeW5jOgorCS8qIE1IejogMCwwLDE4MywxMDAsMTMzLDE2NywyMDAsMjMzICovCisJLmxvbmcJMCwgMCwgNiwgMTAsIDgsIDYsIDUsIDQJCS8qIG5TZWMgKi8KKyNlbmRpZgorCisvKgorICogYm9hcmRfYXNtX2luaXQoKSAtIGVhcmx5IGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLiBDb2RlZCB0byBiZSBwb3J0YWJsZSB0bworICogZHVhbC1DUFUgY29uZmlndXJhdGlvbi4KKyAqIENoZWNrcyBDUFUgbnVtYmVyIGFuZCBwZXJmb3JtcyBib2FyZCBIVyBpbml0aWFsaXphdGlvbiBpZiBjYWxsZWQgZm9yIENQVTAuCisgKiBSZWdpc3RlcnMgdXNlZDogcjMscjQscjUscjYscjE5LHIyOQorICoKKyAqIE5PVEU6IEZvciBkdWFsLUNQVSBjb25maWd1cmF0aW9uIG9ubHkgQ1BVMCBpcyBhbGxvd2VkIHRvIGNvbmZpZ3VyZSBUc2kxMDgKKyAqIGFuZCB0aGUgcmVzdCBvZiB0aGUgYm9hcmQuIEN1cnJlbnQgaW1wbGVtZW50YXRpb24gZGVtb25zdHJhdGVzIHR3bworICogcG9zc2libGUgd2F5cyB0byBpZGVudGlmeSBDUFUgbnVtYmVyOgorICogLSBmb3IgTVBDNzR4eCBwbGF0Zm9ybTogdXNlcyBNU1NDUjBbSURdIGJpdCBhcyBkZWZpbmVkIGluIFVNLgorICogLSBmb3IgUFBDNzUwRlgvR1ggYm9hcmRzOiB1c2VzIFdIT19BTV9JIGJpdCByZXBvcnRlZCBieSBUc2kxMDguCisgKi8KKworCS5nbG9ibCBib2FyZF9hc21faW5pdAorYm9hcmRfYXNtX2luaXQ6CisJbWZscglyMTkJLyogU2F2ZSBMUiB0byBiZSBhYmxlIHJldHVybiBsYXRlci4gKi8KKwlibAlpY2FjaGVfZW5hYmxlCS8qIEVuYWJsZSBpY2FjaGUgdG8gcmVkdWNlIHJlYWRzIGZyb20gZmxhc2guICovCisKKy8qIEluaXRpYWxpemUgcG9pbnRlciB0byBUc2kxMDggcmVnaXN0ZXIgc3BhY2UgKi8KKworCUxPQURfUFRSKHIyOSxDRkdfVFNJMTA4X0NTUl9SU1RfQkFTRSkvKiByMjkgLSBwb2ludGVyIHRvIHRzaTEwOCBDU1Igc3BhY2UgKi8KKwlvcmkgcjQscjI5LFRTSTEwOF9QQl9SRUdfT0ZGU0VUCisKKy8qIENoZWNrIFByb2Nlc3NvciBWZXJzaW9uIE51bWJlciAqLworCisJbWZzcHIJcjMsIFBWUgorCXJsd2lubQlyMyxyMywxNiwxNiwyMwkvKiBnZXQgKChQcm9jZXNzb3IgVmVyc2lvbiBOdW1iZXIpICYgMHhGRjAwKSAqLworCisJY21wbGkJMCwwLHIzLDB4ODAwMAkvKiBNUEM3NHh4ICovCisJYm5lCWNvbnRfYnJkX2luaXQKKworCS8qCisJICogRm9yIE1QQzc0NHgvNXggZW5hYmxlIGV4dGVuZGVkIEJBVHNbNC03XQorCSAqIFNyaTogU2V0IEhJR0hfQkFUX0VOIGFuZCBYQlNFTiwgYW5kIFNQRCA9MQorCSAqIHRvIGRpc2FibGUgcHJlZmV0Y2gKKwkgKi8KKworCW1mc3ByCXI1LCBISUQwCisJb3JpcwlyNSwgcjUsIDB4MDA4MAkvKiBTZXQgSElEMFtISUdIX0JBVF9FTl0gYml0ICM4ICovCisJb3JpCXI1LCByNSwgMHgwMzgwCS8qIFNldCBTUEQsWEJTRU4sU0dFIGJpdHMgIzIyLDIzLDI0ICovCisJbXRzcHIJSElEMCwgcjUKKwlpc3luYworCXN5bmMKKworCS8qIEFkZGluZyBjb2RlIHRvIGRpc2FibGUgZXh0ZXJuYWwgaW50ZXJ2ZW50aW9ucyBpbiBNUFggYnVzIG1vZGUgKi8KKwltZnNwcglyMywgMTAxNAorCW9yaXMJcjMsIHIzLCAweDAxMDAJLyogU2V0IHRoZSBFSURJUyBiaXQgaW4gTVNTQ1IwOiAgYml0IDcgKi8KKwltdHNwcgkxMDE0LCByMworCWlzeW5jCisJc3luYworCisJLyogU3JpOiBjb2RlIHRvIGVuYWJsZSBGUCB1bml0ICovCisJbWZtc3IJcjMKKwlvcmkJcjMsIHIzLCAweDIwMDAKKwltdG1zcglyMworCWlzeW5jCisJc3luYworCisJLyogZGVmIENPTkZJR19EVUFMX0NQVQorCSAqIEZvciBNUEM3NHh4IHByb2Nlc3NvciwgdXNlIE1TU0NSMFtJRF0gYml0IHRvIGlkZW50aWZ5IENQVSBudW1iZXIuCisJICovCisjaWYoMSkKKwltZnNwcglyMywxMDE0CQkvKiByZWFkIE1TU0NSMCAqLworCXJsd2lubS4JcjMscjMsMjcsMzEsMzEJLyogZ2V0IHByb2Nlc3NvciBJRCBudW1iZXIgKi8KKwltdHNwcglTUFJOX1BJUixyMwkvKiBTYXZlIENQVSBJRCAqLworCXN5bmMKKwlibmUJaW5pdF9kb25lCisJYglkb190c2kxMDhfaW5pdAorCitjb250X2JyZF9pbml0OgorCisJLyogQW4gYWx0ZXJuYXRpdmUgbWV0aG9kIG9mIGNoZWNraW5nIHRoZSBwcm9jZXNzb3IgbnVtYmVyIChpbiBhZGRpdGlvbgorCSAqIHRvIGNvbmZpZ3VyYXRpb24gdXNpbmcgTVNTQ1IwW0lEXSBiaXQgb24gTVBDNzR4eCkuCisJICogR29vZCBmb3IgSUJNIFBQQzc1MEZYL0dYLgorCSAqLworCisJbHd6CXIzLFBCX0JVU19NU19TRUxFQ1QocjQpCS8qIHJlYWQgUEJfSUQgcmVnaXN0ZXIgKi8KKwlybHdpbm0uCXIzLHIzLDI0LDMxLDMxCQkvKiBnZXQgcHJvY2Vzc29yIElEIG51bWJlciAqLworCWJuZSBpbml0X2RvbmUKKyNlbHNlCisKK2NvbnRfYnJkX2luaXQ6CisKKyNlbmRpZiAvKiBDT05GSUdfRFVBTF9DUFUgKi8KKworCS8qIEluaXRpYWxpemUgVHNpMTA4IGNoaXAgKi8KKworZG9fdHNpMTA4X2luaXQ6CisKKwkvKgorCSAqIEFkanVzdCBITFAvRmxhc2ggcGFyYW1ldGVycy4gQnkgZGVmYXVsdCBhZnRlciByZXNldCB0aGUgSExQIHBvcnQgaXMKKwkgKiBzZXQgdG8gc3VwcG9ydCBzbG93IGRldmljZXMuIEJldHRlciBwZXJmb3JtYW5jZSBjYW4gYmUgYWNoaXZlZCB3aGVuCisJICogYW4gb3B0aW1hbCBwYXJhbWV0ZXJzIGFyZSB1c2VkIGZvciBzcGVjaWZpYyBFUFJPTSBkZXZpY2UuCisJICogTk9URTogVGhpcyBzaG91bGQgYmUgcGVyZm9ybWVkIEFTQVAgZm9yIHRoZSBlbXVsYXRpb24gcGxhdGZvcm0KKwkgKiBiZWNhdXNlIGl0IGhhcyA1TUh6IEhMUCBjbG9ja2luZy4KKwkgKi8KKworI2lmZGVmIENPTkZJR19UU0kxMDhFTVUKKwlvcmkJcjQscjI5LFRTSTEwOF9ITFBfUkVHX09GRlNFVAorCUxPQURfVTMyKHI1LDB4NDM0NDIyYzApCisJc3R3CXI1LDB4MDgocjQpCS8qIHNldCBITFAgQjBfQ1RSTDAgKi8KKwlzeW5jCisJTE9BRF9VMzIocjUsMHhkMDAxMjAwMCkKKwlzdHcJcjUsMHgwYyhyNCkJCS8qIHNldCBITFAgQjBfQ1RSTDEgKi8KKwlzeW5jCisjZW5kaWYKKworCS8qIEluaXRpYWxpemUgUEIgaW50ZXJmYWNlLiAqLworCisJb3JpIHI0LHIyOSxUU0kxMDhfUEJfUkVHX09GRlNFVAorCisjaWYgKENGR19UU0kxMDhfQ1NSX0JBU0UgIT0gQ0ZHX1RTSTEwOF9DU1JfUlNUX0JBU0UpCisJLyogUmVsb2NhdGUgKGlmIHJlcXVpcmVkKSBUc2kxMDggcmVnaXN0ZXJzLiBTZXQgbmV3IHZhbHVlIGZvcgorCSAqIFBCX1JFR19CQVI6CisJICogTm90ZSB3ZSBhcmUgaW4gdGhlIDMyLWJpdCBhZGRyZXNzIG1vZGUuCisJICovCisJTE9BRF9VMzIocjUsKENGR19UU0kxMDhfQ1NSX0JBU0UgfCAweDAxKSkgLyogUEJfUkVHX0JBUjogQkEgKyBFTiAqLworCXN0dwlyNSxQQl9SRUdfQkFSKHI0KQorCWFuZGlzLglyMjkscjUsMHhGRkZGCisJc3luYworCW9yaQlyNCxyMjksVFNJMTA4X1BCX1JFR19PRkZTRVQKKyNlbmRpZgorCisJLyogU2V0IFBCIFNsYXZlIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KKworCUxPQURfVTMyKHI1LDB4MDAwMDI0ODEpCS8qIFBCX1NDUjogVEVBIGVuYWJsZWQsQUFDSyBkZWxheSA9IDEgKi8KKwlsd3oJcjMsIFBCX1JTUihyNCkJLyogZ2V0IFBCIGJ1cyBtb2RlICovCisJeG9yaQlyMyxyMywweDAwMDEJLyogbWFzayBQQl9CTU9ERTogcjMgLT4gKDAgPSA2MFgsIDEgPSBNUFgpICovCisJcmx3aW1pICByNSxyMywxNCwxNywxNwkvKiBmb3IgTVBYOiBzZXQgRFRJX01PREUgYml0ICovCisJc3R3CXI1LFBCX1NDUihyNCkKKwlzeW5jCisKKwkvKiBDb25maWd1cmUgUEIgQXJiaXRlciAqLworCisJbHd6CXI1LFBCX0FSQl9DVFJMKHI0KQkvKiBSZWFkIFBCIEFyYml0ZXIgQ29udHJvbCBSZWdpc3RlciAqLworCWxpCXIzLCAweDAwRjAJCS8qIEFSQl9QSVBFTElORV9ERVAgbWFzayAqLworI2lmZGVmIERJU0FCTEVfUEJNCisJb3JpCXIzLHIzLDB4MTAwMAkvKiBhZGQgUEJNX0VOIHRvIGNsZWFyIChlbmFibGVkIGJ5IGRlZmF1bHQpICovCisjZW5kaWYKKwlhbmRjCXI1LHI1LHIzCS8qIENsZWFyIHRoZSBtYXNrZWQgYml0IGZpZWxkcyAqLworCW9yaQlyNSxyNSwweDAwMDEJLyogU2V0IHBpcGVsaW5lIGRlcHRoICovCisJc3R3CXI1LFBCX0FSQl9DVFJMKHI0KQorCisjaWYgKDApCS8qIGN1cnJlbnRseSB1c2luZyB0aGUgZGVmYXVsdCBzZXR0aW5ncyBmb3IgUEJNIGFmdGVyIHJlc2V0ICovCisJTE9BRF9VMzIocjUsMHgpCQkvKiB2YWx1ZSBmb3IgUEJfTUNSICovCisJc3R3CXI1LFBCX01DUihyNCkKKwlzeW5jCisKKwlMT0FEX1UzMihyNSwweCkJCS8qIHZhbHVlIGZvciBQQl9NQ01EICovCisJc3R3CXI1LFBCX01DTUQocjQpCisJc3luYworI2VuZGlmCisKKwkvKiBEaXNhYmxlIG9yIGVuYWJsZSBQVlQgYmFzZWQgb24gcHJvY2Vzc29yIGJ1cyBmcmVxdWVuY3kKKwkgKiAxLiBSZWFkIENHX1BXUlVQX1NUQVRVUyByZWdpc3RlciBmaWVsZCBiaXRzIDE4LDE3LDE2CisJICogMi4gU2VlIGlmIHRoZSB2YWx1ZSBpcyA8IG9yID4gMTMzbWh6ICgxODoxNiA9IDEwMCkKKwkgKiAzLiBJZiA+IGVuYWJsZSBQVlQKKwkgKi8KKworCUxPQURfVTMyKHIzLDB4QzAwMDIyMzQpCisJbHd6CXIzLDAocjMpCisJcmx3aW5tCXIzLHIzLDE2LDI5LDMxCisKKwljbXBpCTAsMCxyMywweDAwMDQKKwliZ3QJc2RjX2luaXQKKworI2lmbmRlZiBDT05GSUdfVFNJMTA4RU1VCisJLyogRklYTUU6IERpc2FibGUgUEIgY2FsaWJyYXRpb24gY29udHJvbCBmb3IgYW55IHJlYWwgVHNpMTA4IGJvYXJkICovCisJbGkJcjUsMHgwMTAxCS8qIGRpc2FibGUgY2FsaWJyYXRpb24gY29udHJvbCAqLworCXN0dwlyNSxQQl9QVlRfQ1RSTDIocjQpCisJc3luYworI2VuZGlmCisKKwkvKiBJbml0aWFsaXplIFNEUkFNIGNvbnRyb2xsZXIuICovCisKK3NkY19pbml0OgorCisjaWZuZGVmIFNEQ19IQVJEQ09ERURfSU5JVAorCS8qIGdldCBTREMgY2xvY2sgcHJpb3IgZG9pbmcgc2RyYW0gY29udHJvbGxlciBhdXRvY29uZmlnICovCisJb3JpCXI0LHIyOSxUU0kxMDhfQ0xLX1JFR19PRkZTRVQJLyogcjQgLSBwdHIgdG8gQ0cgcmVnaXN0ZXJzICovCisJbHd6CXIzLCBDR19QV1JVUF9TVEFUVVMocjQpCQkvKiBnZXQgQ0cgY29uZmlndXJhdGlvbiAqLworCXJsd2lubQlyMyxyMywxMiwyOSwzMQkJCS8qIHIzIC0gU0QgY2xrICovCisJbGlzCXI1LHNkY19jbGtfc3luY0BoCisJb3JpCXI1LHI1LHNkY19jbGtfc3luY0BsCisJLyogU3JpOiAgQXQgdGhpcyBwb2ludCBjaGVjayBpZiByMyA9IDAwMS4gSWYgeWVzLAorCSAqIHRoZSBtZW1vcnkgZnJlcXVlbmN5IHNob3VsZCBiZSBzYW1lIGFzIHRoZQorCSAqIE1QWCBidXMgZnJlcXVlbmN5CisJICovCisJY21waQkwLDAscjMsMHgwMDAxCisJYm5lCWdldF9uc2VjCisJbHd6CXI2LCBDR19QV1JVUF9TVEFUVVMocjQpCisJcmx3aW5tCXI2LHI2LDE2LDI5LDMxCisJbXIJcjMscjYKKworZ2V0X25zZWM6CisJcmx3aW5tCXIzLHIzLDIsMCwzMQorCWx3engJcjkscjUscjMJLyogZ2V0IFNEIGNsayByYXRlIGluIG5TZWMgKi8KKwkvKiBBVFROOiByOSB3aWxsIGJlIHVzZWQgYnkgU1BEIHJvdXRpbmUgKi8KKyNlbmRpZiAvKiAhU0RDX0hBUkRDT0RFRF9JTklUICovCisKKwlvcmkJcjQscjI5LFRTSTEwOF9TRF9SRUdfT0ZGU0VUIC8qIHI0IC0gcHRyIHRvIFNEUkFNIHJlZ2lzdGVycyAqLworCisJLyogSW5pdGlhbGl6ZSBTRFJBTSBjb250cm9sbGVyLiBTRFJBTSBTaXplID0gNTEyTUIsIE9uZSBESU1NLiAqLworCisJTE9BRF9VMzIocjUsMHgwMCkKKwlzdHcJcjUsU0RfSU5UX0VOQUJMRShyNCkgLyogRW5zdXJlIHRoYXQgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgKi8KKyNpZmRlZiBFTkFCTEVfU0RSQU1fRUNDCisJbGkJcjUsIDB4MDEKKyNlbmRpZiAvKiBFTkFCTEVfU0RSQU1fRUNDICovCisJc3R3CXI1LFNEX0VDQ19DVFJMKHI0KQkvKiBFbmFibGUvRGlzYWJsZSBFQ0MgKi8KKwlzeW5jCisKKyNpZmRlZiBTRENfSEFSRENPREVEX0lOSVQgLyogY29uZmlnIHNkcmFtIGNvbnRyb2xsZXIgd2l0aCBoYXJkY29kZWQgdmFsdWVzICovCisKKwkvKiBGaXJzdCByZWFkIHRoZSBDR19QV1JVUF9TVEFUVVMgcmVnaXN0ZXIgdG8gZ2V0IHRoZQorCSAqIG1lbW9yeSBzcGVlZCBmcm9tIGJpdHMgMjIsMjEsMjAKKwkgKi8KKworCUxPQURfVTMyKHIzLDB4QzAwMDIyMzQpCisJbHd6CXIzLDAocjMpCisJcmx3aW5tCXIzLHIzLDEyLDI5LDMxCisKKwkvKiBOb3cgZmlyc3QgY2hlY2sgZm9yIDE2NiwgdGhlbiAyMDAsIG9yIGRlZmF1bHQgKi8KKworCWNtcGkJMCwwLHIzLDB4MDAwNQorCWJuZQljaGVja19mb3JfMjAwbWh6CisKKwkvKiBzZXQgdmFsdWVzIGZvciAxNjYgTWh6IG1lbW9yeSBzcGVlZAorCSAqIFNldCByZWZyZXNoIHJhdGUgYW5kIHRpbWluZyBwYXJhbWV0ZXJzCisJICovCisJTE9BRF9VMzIocjUsMHgwMDAwMDUxNSkKKwlzdHcJcjUsU0RfUkVGUkVTSChyNCkKKwlMT0FEX1UzMihyNSwweDAzMDczMzY4KQorCXN0dwlyNSxTRF9USU1JTkcocjQpCisJc3luYworCisJLyogSW5pdGlhbGl6ZSBESU1NMCBjb250cm9sIGFuZCBCQVIgcmVnaXN0ZXJzICovCisJTE9BRF9VMzIocjUsVkFMX1NEX0QwX0NUUkwpCS8qIGF1dG8tcHJlY2hhcmdlIGRpc2FibGVkICovCisjaWZkZWYgU0RDX0FVVE9QUkVDSF9FTgorCW9yaXMJcjUscjUsMHgwMDAxCQkvKiBzZXQgYXV0byBwcmVjaGFyZ2UgRU4gYml0ICovCisjZW5kaWYKKwlzdHcJcjUsU0RfRDBfQ1RSTChyNCkKKwlMT0FEX1UzMihyNSxWQUxfU0RfRDBfQkFSKQorCXN0dwlyNSxTRF9EMF9CQVIocjQpCisJc3luYworCisJLyogSW5pdGlhbGl6ZSBESU1NMSBjb250cm9sIGFuZCBCQVIgcmVnaXN0ZXJzCisJICogKHNhbWUgYXMgZGltbSAwLCBuZXh0IDUxMk1CLCBkaXNhYmxlZCkKKwkgKi8KKwlMT0FEX1UzMihyNSxWQUxfU0RfRDFfQ1RSTCkJLyogYXV0by1wcmVjaGFyZ2UgZGlzYWJsZWQgKi8KKyNpZmRlZiBTRENfQVVUT1BSRUNIX0VOCisJb3JpcwlyNSxyNSwweDAwMDEJLyogc2V0IGF1dG8gcHJlY2hhcmdlIEVOIGJpdCAqLworI2VuZGlmCisJc3R3CXI1LFNEX0QxX0NUUkwocjQpCisJTE9BRF9VMzIocjUsVkFMX1NEX0QxX0JBUikKKwlzdHcJcjUsU0RfRDFfQkFSKHI0KQorCXN5bmMKKworCWIJc2RjX2luaXRfZG9uZQorCitjaGVja19mb3JfMjAwbWh6OgorCisJY21waQkwLDAscjMsMHgwMDA2CisJYm5lCXNldF9kZWZhdWx0X3ZhbHVlcworCisJLyogc2V0IHZhbHVlcyBmb3IgMjAwTWh6IG1lbW9yeSBzcGVlZAorCSAqIFNldCByZWZyZXNoIHJhdGUgYW5kIHRpbWluZyBwYXJhbWV0ZXJzCisJICovCisJTE9BRF9VMzIocjUsMHgwMDAwMDYxYSkKKwlzdHcJcjUsU0RfUkVGUkVTSChyNCkKKwlMT0FEX1UzMihyNSwweDAzMDgzMzQ4KQorCXN0dwlyNSxTRF9USU1JTkcocjQpCisJc3luYworCisJLyogSW5pdGlhbGl6ZSBESU1NMCBjb250cm9sIGFuZCBCQVIgcmVnaXN0ZXJzICovCisJTE9BRF9VMzIocjUsVkFMX1NEX0QwX0NUUkwpCS8qIGF1dG8tcHJlY2hhcmdlIGRpc2FibGVkICovCisjaWZkZWYgU0RDX0FVVE9QUkVDSF9FTgorCW9yaXMJcjUscjUsMHgwMDAxCQkvKiBzZXQgYXV0byBwcmVjaGFyZ2UgRU4gYml0ICovCisjZW5kaWYKKwlzdHcJcjUsU0RfRDBfQ1RSTChyNCkKKwlMT0FEX1UzMihyNSxWQUxfU0RfRDBfQkFSKQorCXN0dwlyNSxTRF9EMF9CQVIocjQpCisJc3luYworCisJLyogSW5pdGlhbGl6ZSBESU1NMSBjb250cm9sIGFuZCBCQVIgcmVnaXN0ZXJzCisJICogKHNhbWUgYXMgZGltbSAwLCBuZXh0IDUxMk1CLCBkaXNhYmxlZCkKKwkgKi8KKwlMT0FEX1UzMihyNSxWQUxfU0RfRDFfQ1RSTCkJLyogYXV0by1wcmVjaGFyZ2UgZGlzYWJsZWQgKi8KKyNpZmRlZiBTRENfQVVUT1BSRUNIX0VOCisJb3JpcwlyNSxyNSwweDAwMDEJCS8qIHNldCBhdXRvIHByZWNoYXJnZSBFTiBiaXQgKi8KKyNlbmRpZgorCXN0dwlyNSxTRF9EMV9DVFJMKHI0KQorCUxPQURfVTMyKHI1LFZBTF9TRF9EMV9CQVIpCisJc3R3CXI1LFNEX0QxX0JBUihyNCkKKwlzeW5jCisKKwliCXNkY19pbml0X2RvbmUKKworc2V0X2RlZmF1bHRfdmFsdWVzOgorCisJLyogU2V0IHJlZnJlc2ggcmF0ZSBhbmQgdGltaW5nIHBhcmFtZXRlcnMgKi8KKwlMT0FEX1UzMihyNSxWQUxfU0RfUkVGUkVTSCkKKwlzdHcJcjUsU0RfUkVGUkVTSChyNCkKKwlMT0FEX1UzMihyNSxWQUxfU0RfVElNSU5HKQorCXN0dwlyNSxTRF9USU1JTkcocjQpCisJc3luYworCisJLyogSW5pdGlhbGl6ZSBESU1NMCBjb250cm9sIGFuZCBCQVIgcmVnaXN0ZXJzICovCisJTE9BRF9VMzIocjUsVkFMX1NEX0QwX0NUUkwpCS8qIGF1dG8tcHJlY2hhcmdlIGRpc2FibGVkICovCisjaWZkZWYgU0RDX0FVVE9QUkVDSF9FTgorCW9yaXMJcjUscjUsMHgwMDAxCQkvKiBzZXQgYXV0byBwcmVjaGFyZ2UgRU4gYml0ICovCisjZW5kaWYKKwlzdHcgCXI1LFNEX0QwX0NUUkwocjQpCisJTE9BRF9VMzIocjUsVkFMX1NEX0QwX0JBUikKKwlzdHcJcjUsU0RfRDBfQkFSKHI0KQorCXN5bmMKKworCS8qIEluaXRpYWxpemUgRElNTTEgY29udHJvbCBhbmQgQkFSIHJlZ2lzdGVycworCSAqIChzYW1lIGFzIGRpbW0gMCwgbmV4dCA1MTJNQiwgZGlzYWJsZWQpCisJICovCisJTE9BRF9VMzIocjUsVkFMX1NEX0QxX0NUUkwpCS8qIGF1dG8tcHJlY2hhcmdlIGRpc2FibGVkICovCisjaWZkZWYgU0RDX0FVVE9QUkVDSF9FTgorCW9yaXMJcjUscjUsMHgwMDAxCQkvKiBzZXQgYXV0byBwcmVjaGFyZ2UgRU4gYml0ICovCisjZW5kaWYKKwlzdHcJcjUsU0RfRDFfQ1RSTChyNCkKKwlMT0FEX1UzMihyNSxWQUxfU0RfRDFfQkFSKQorCXN0dwlyNSxTRF9EMV9CQVIocjQpCisJc3luYworI2Vsc2UgLyogIVNEQ19IQVJEQ09ERURfSU5JVCAqLworCWJsCXRzaTEwOF9zZHJhbV9zcGQJLyogYXV0b21hdGljYWxseSBkZXRlY3QgU0RDIHNldHRpbmdzICovCisjZW5kaWYgLyogU0RDX0hBUkRDT0RFRF9JTklUICovCisKK3NkY19pbml0X2RvbmU6CisKKyNpZmRlZiBESVNBQkxFX1BCTQorCUxPQURfVTMyKHI1LDB4MDAwMDAwMzApCQkvKiBQQl9FTiArIE9DTl9FTiAqLworI2Vsc2UKKwlMT0FEX1UzMihyNSwweDAwMDAwMjMwKQkJLyogUEJfRU4gKyBPQ05fRU4gKyBQQi9PQ049ODAvMjAgKi8KKyNlbmRpZiAvKiBESVNBQkxFX1BCTSAqLworCisjaWZkZWYgQ09ORklHX1RTSTEwOEVNVQorCW9yaXMJcjUscjUsMHgwMDEwCQkvKiBzZXQgRU1VTEFUSU9OX01PREUgYml0ICovCisjZW5kaWYKKworCXN0dwlyNSxTRF9DVFJMKHI0KQorCWVpZWlvCisJc3luYworCisJLyogRW5hYmxlIFNEUkFNIGFjY2VzcyAqLworCisJb3JpcwlyNSxyNSwweDgwMDAJCS8qIHN0YXJ0IFNEQzogc2V0IFNEX0NUUkxbRU5BQkxFXSBiaXQgKi8KKwlzdHcJcjUsU0RfQ1RSTChyNCkKKwlzeW5jCisKK3dhaXRfaW5pdF9jb21wbGV0ZToKKwlsd3oJcjUsU0RfU1RBVFVTKHI0KQorCWFuZGkuCXI1LHI1LDB4MDAwMQorCS8qIHdhaXQgdW50aWwgU0RSQU0gaW5pdGlhbGl6YXRpb24gaXMgY29tcGxldGUgKi8KKwliZXEJd2FpdF9pbml0X2NvbXBsZXRlCisKKwkvKiBNYXAgU0RSQU0gaW50byB0aGUgcHJvY2Vzc29yIGJ1cyBhZGRyZXNzIHNwYWNlICovCisKKwlvcmkJcjQscjI5LFRTSTEwOF9QQl9SRUdfT0ZGU0VUCisKKwkvKiBTZXR1cCBCQVJzIGFzc29jaWF0ZWQgd2l0aCBkaXJlY3QgcGF0aCBQQjwtPlNEUkFNICovCisKKwkvKiBQQl9TRFJBTV9CQVIxOgorCSAqIHByb3ZpZGVzIGEgZGlyZWN0IHBhdGggdG8gdGhlIG1haW4gc3lzdGVtIG1lbW9yeSAoY2FjaGVhYmxlIFNEUkFNKQorCSAqLworCisJLyogQkE9MCxTaXplPTUxMk1CLCBFTmFibGUsIE5vIEFkZHIuVHJhbnNsYXRpb24gKi8KKwlMT0FEX1UzMihyNSwgMHgwMDAwMDAxMSkKKwlzdHcJcjUsUEJfU0RSQU1fQkFSMShyNCkKKwlzeW5jCisKKwkvKiBNYWtlIHN1cmUgdGhhdCBQQl9TRFJBTV9CQVIxIGRlY29kZXIgaXMgc2V0CisJICogKHRvIGFsbG93IGZvbGxvd2luZyBpbW1lZGlhdGUgcmVhZCBmcm9tIFNEUkFNKQorCSAqLworCWx3eglyNSxQQl9TRFJBTV9CQVIxKHI0KQorCXN5bmMKKworCS8qIFBCX1NEUkFNX0JBUjI6CisJICogcHJvdmlkZXMgbm9uLWNhY2hlYWJsZSBhbGlhcyAodmlhIHRoZSBkaXJlY3QgcGF0aCkgdG8gbWFpbgorCSAqIHN5c3RlbSBtZW1vcnkuCisJICogU2l6ZSA9IDUxMk1CLCBFTmFibGUsIEFkZHIuVHJhbnNsYXRpb24gLSBPTiwKKwkgKiBCQSA9IDB4MF80MDAwMDAwMCwgVEEgPSAweDBfMDAwMDAwMDAKKwkgKi8KKworCUxPQURfVTMyKHI1LCAweDQwMDEwMDExKQorCXN0dwlyNSxQQl9TRFJBTV9CQVIyKHI0KQorCXN5bmMKKworCS8qIE1ha2Ugc3VyZSB0aGF0IFBCX1NEUkFNX0JBUjIgZGVjb2RlciBpcyBzZXQKKwkgKiAodG8gYWxsb3cgZm9sbG93aW5nIGltbWVkaWF0ZSByZWFkIGZyb20gU0RSQU0pCisJICovCisJbHd6CXI1LFBCX1NEUkFNX0JBUjIocjQpCisJc3luYworCitpbml0X2RvbmU6CisKKwkvKiBBbGwgZG9uZS4gUmVzdG9yZSBMUiBhbmQgcmV0dXJuLiAqLworCW10bHIJcjE5CisJYmxyCisKKyNpZiAoMCkKKwkvKgorCSAqIGluaXRfY3B1MQorCSAqIFRoaXMgcm91dGluZSBlbmFibGVzIENQVTEgb24gdGhlIGR1YWwtcHJvY2Vzc29yIHN5c3RlbS4KKwkgKiBOb3cgdGhlcmUgaXMgb25seSBvbmUgcHJvY2Vzc29yIGluIHRoZSBzeXN0ZW0KKwkgKi8KKworCS5nbG9iYWwgZW5hYmxlX2NwdTEKK2VuYWJsZV9jcHUxOgorCisJbGlzCXIzLFRzaTEwOF9CYXNlQGhhCS8qIEdldCBHcmVuZGVsIENTUiBCYXNlIEFkZHIgKi8KKwlhZGRpCXIzLHIzLFRzaTEwOF9CYXNlQGwKKwlsd3oJcjMsMChyMykJCS8qIFIzID0gQ1NSIEJhc2UgQWRkciAqLworCW9yaQlyNCxyMyxUU0kxMDhfUEJfUkVHX09GRlNFVAorCWx3eglyMyxQQl9BUkJfQ1RSTChyNCkJLyogUmVhZCBQQiBBcmJpdGVyIENvbnRyb2wgUmVnaXN0ZXIgKi8KKwlvcmkJcjMscjMsMHgwMjAwCQkvKiBTZXQgTTFfRU4gYml0ICovCisJc3R3CXIzLFBCX0FSQl9DVFJMKHI0KQorCisJYmxyCisjZW5kaWYKKworCS8qCisJICogZW5hYmxlX0VJCisJICogRW5hYmxlIENQVSBjb3JlIGV4dGVybmFsIGludGVycnVwdAorCSAqLworCisJLmdsb2JhbAllbmFibGVfRUkKK2VuYWJsZV9FSToKKwltZm1zcglyMworCW9yaQlyMyxyMywweDgwMDAJLyogc2V0IEVFIGJpdCAqLworCW10bXNyCXIzCisJYmxyCisKKwkvKgorCSAqIGRpc2FibGVfRUkKKwkgKiBEaXNhYmxlIENQVSBjb3JlIGV4dGVybmFsIGludGVycnVwdAorCSAqLworCisJLmdsb2JhbCBkaXNhYmxlX0VJCitkaXNhYmxlX0VJOgorCW1mbXNyCXIzCisJbGkJcjQsLTMyNzY4CS8qIGFrYSAibGkgIHI0LDB4ODAwMCIgKi8KKwlhbmRjCXIzLHIzLHI0CS8qIGNsZWFyIEVFIGJpdCAqLworCW10bXNyCXIzCisJYmxyCisKKyNpZmRlZiBFTkFCTEVfU0RSQU1fRUNDCisJLyogZW5hYmxlcyBTRFJBTSBFQ0MgICovCisKKwkuZ2xvYmFsCWVuYWJsZV9FQ0MKK2VuYWJsZV9FQ0M6CisJb3JpCXI0LHIyOSxUU0kxMDhfU0RfUkVHX09GRlNFVAorCWx3eglyMyxTRF9FQ0NfQ1RSTChyNCkJLyogUmVhZCBTRFJBTSBFQ0MgQ29udHJvbCBSZWdpc3RlciAqLworCW9yaQlyMyxyMywweDAwMDEJCS8qIFNldCBFQ0NfRU4gYml0ICovCisJc3R3CXIzLFNEX0VDQ19DVFJMKHI0KQorCWJscgorCisJLyoKKwkgKiBjbGVhcl9FQ0NfZXJyCisJICogQ2xlYXJzIGFsbCBwZW5kaW5nIFNEUkFNIEVDQyBlcnJvcnMKKwkgKiAobm9ybWFsbHkgYWZ0ZXIgU0RSQU0gc2NydWJiaW5nL2luaXRpYWxpemF0aW9uKQorCSAqLworCisJLmdsb2JhbAljbGVhcl9FQ0NfZXJyCitjbGVhcl9FQ0NfZXJyOgorCW9yaSByNCxyMjksVFNJMTA4X1NEX1JFR19PRkZTRVQKKwlvcmkgcjMscjAsMHgwMDMwCS8qIEVDQ19VRV9JTlQgKyBFQ0NfQ0VfSU5UIGJpdHMgKi8KKwlzdHcgcjMsU0RfSU5UX1NUQVRVUyhyNCkKKwlibHIKKworI2VuZGlmIC8qIEVOQUJMRV9TRFJBTV9FQ0MgKi8KKworI2lmbmRlZiBTRENfSEFSRENPREVEX0lOSVQKKworCS8qIFNEUkFNIFNQRCBTdXBwb3J0ICovCisjZGVmaW5lCVNEX0kyQ19DVFJMMQkoMHg0MDApCisjZGVmaW5lCVNEX0kyQ19DVFJMMgkoMHg0MDQpCisjZGVmaW5lIFNEX0kyQ19SRF9EQVRBCSgweDQwOCkKKyNkZWZpbmUgU0RfSTJDX1dSX0RBVEEJKDB4NDBDKQorCisJLyoKKwkgKiBTRFJBTSBTUEQgU3VwcG9ydCBNYWNyb3MKKwkgKi8KKworI2RlZmluZSBTUERfRElNTTAJKDB4MDAwMDAxMDApCisjZGVmaW5lIFNQRF9ESU1NMQkoMHgwMDAwMDIwMCkJLyogU1BEX0RJTU0xIHdhcyAweDAwMDAwMDAwICovCisKKyNkZWZpbmUgU1BEX1JESU1NCQkJKDB4MDEpCisjZGVmaW5lIFNQRF9VRElNTQkJCSgweDAyKQorCisjZGVmaW5lIFNQRF9DQVNfMwkJCTB4OAorI2RlZmluZSBTUERfQ0FTXzQJCQkweDEwCisjZGVmaW5lIFNQRF9DQVNfNQkJCTB4MjAKKworI2RlZmluZSBFUlJfTk9fRElNTV9GT1VORAkJKDB4ZGIwKQorI2RlZmluZSBFUlJfVFJBU19GQUlMCQkJKDB4ZGIxKQorI2RlZmluZSBFUlJfVFJDRF9GQUlMCQkJKDB4ZGIyKQorI2RlZmluZSBFUlJfVFJQX0ZBSUwJCQkoMHhkYjMpCisjZGVmaW5lIEVSUl9UV1JfRkFJTAkJCSgweGRiNCkKKyNkZWZpbmUgRVJSX1VOS05PV05fUEFSVAkJKDB4ZGI1KQorI2RlZmluZSBFUlJfTlJBTktfSU5WQUxJRAkJKDB4ZGI2KQorI2RlZmluZSBFUlJfRElNTV9TSVpFCQkJKDB4ZGI3KQorI2RlZmluZSBFUlJfQUREUl9NT0RFCQkJKDB4ZGI4KQorI2RlZmluZSBFUlJfUkZSU0hfUkFURQkJCSgweGRiOSkKKyNkZWZpbmUgRVJSX0RJTU1fVFlQRQkJCSgweGRiYSkKKyNkZWZpbmUgRVJSX0NMX1ZBTFVFCQkJKDB4ZGJiKQorI2RlZmluZSBFUlJfVFJGQ19GQUlMCQkJKDB4ZGJjKQorCisvKiBSRUFEX1NQRCByZXF1aXJlbWVudHM6CisgKiBieXRlIC0gYnl0ZSBhZGRyZXNzIGluIFNQRCBkZXZpY2UgKDAgLSAyNTUpCisgKiByMyA9IHdpbGwgcmV0dXJuIGRhdGEgcmVhZCBmcm9tIEkyQyBCeXRlIGxvY2F0aW9uCisgKiByNCAtIHVuY2hhbmdlZCAoU0RDIGJhc2UgYWRkcikKKyAqIHI1IC0gY2xvYmJlcmVkIGluIHJvdXRpbmUgKEkyQyBzdGF0dXMpCisgKiByMTAgLSBudW1iZXIgb2YgRERSIHNsb3Qgd2hlcmUgZmlyc3QgU1BEIGRldmljZSBpcyBkZXRlY3RlZAorICovCisKKyNkZWZpbmUgUkVBRF9TUEQoYnl0ZV9udW0pCQlcCisJYWRkaXMJcjMsIDAsIGJ5dGVfbnVtQGw7CVwKKwlvcglyMywgcjMsIHIxMDsJCVwKKwlvcmkJcjMsIHIzLCAweDBBOwkJXAorCXN0dwlyMywgU0RfSTJDX0NUUkwxKHI0KTsJXAorCWxpCXIzLCBJMkNfQ05UUkwyX1NUQVJUOwlcCisJc3R3CXIzLCBTRF9JMkNfQ1RSTDIocjQpOwlcCisJZWllaW87CQkJCVwKKwlzeW5jOwkJCQlcCisJbGkJcjMsIDB4MTAwOwkJXAorMTo7CQkJCQlcCisJYWRkaWMuCXIzLCByMywgLTE7CQlcCisJYm5lCTFiOwkJCVwKKzI6OwkJCQkJXAorCWx3eglyNSwgU0RfSTJDX0NUUkwyKHI0KTsJXAorCXJsd2lubS4JcjMscjUsMCwyMywyMzsJCVwKKwlibmUJMmI7CQkJXAorCXJsd2lubS4JcjMscjUsMCwzLDM7CQlcCisJbHd6CXIzLFNEX0kyQ19SRF9EQVRBKHI0KQorCisjZGVmaW5lIFNQRF9NSU5fUkZSU0gJKDB4ODApCisjZGVmaW5lIFNQRF9NQVhfUkZSU0gJKDB4ODUpCisKK3JlZnJlc2hfcmF0ZXM6CS8qIGluIG5TZWMgKi8KKwkubG9uZwkxNTYyNQkvKiBOb3JtYWwgKDB4ODApICovCisJLmxvbmcJMzkwMAkvKiBSZWR1Y2VkIDAuMjV4ICgweDgxKSAqLworCS5sb25nCTc4MDAJLyogUmVkdWNlZCAwLjV4ICgweDgyKSAqLworCS5sb25nCTMxMzAwCS8qIEV4dGVuZGVkIDJ4ICgweDgzKSAqLworCS5sb25nCTYyNTAwCS8qIEV4dGVuZGVkIDR4ICgweDg0KSAqLworCS5sb25nCTEyNTAwMAkvKiBFeHRlbmRlZCA4eCAoMHg4NSkgKi8KKworLyoKKyAqIHRzaTEwOF9zZHJhbV9zcGQKKyAqCisgKiBJbml0dGlhbGl6ZXMgU0RSQU0gQ29udHJvbGxlciB1c2luZyBERFIyIERJTU0gU2VyaWFsIFByZXNlbmNlIERldGVjdCBkYXRhCisgKiBVc2VzIHJlZ2lzdGVyczogcjQgLSBTREMgYmFzZSBhZGRyZXNzIChub3QgY2hhbmdlZCkKKyAqCQkJCSAgIHI5IC0gU0RDIGNsb2NraW5nIHBlcmlvZCBpbiBuU2VjCisgKiBDaGFuZ2VzIHJlZ2lzdGVyczogcjMscjUscjYscjcscjgscjEwLHIxMQorICovCisKK3RzaTEwOF9zZHJhbV9zcGQ6CisKKwlsaQlyMTAsU1BEX0RJTU0wCisJeG9yCXIxMSxyMTEscjExCQkvKiBESU1NIEJhc2UgQWRkcmVzczogc3RhcnRzIGZyb20gMCAqLworCitkb19maXJzdF9kaW1tOgorCisJLyogUHJvZ3JhbSBSZWZyZXNoIFJhdGUJUmVnaXN0ZXIgKi8KKworCVJFQURfU1BEKDEyKQkJCS8qIGdldCBSZWZyZXNoIFJhdGUgKi8KKwliZXEJY2hlY2tfbmV4dF9zbG90CisJbGkJcjUsIEVSUl9SRlJTSF9SQVRFCisJY21waQkwLDAscjMsU1BEX01JTl9SRlJTSAorCWJsZQlzcGRfZmFpbAorCWNtcGkJMCwwLHIzLFNQRF9NQVhfUkZSU0gKKwliZ3QJc3BkX2ZhaWwKKwlhZGRpCXIzLHIzLC1TUERfTUlOX1JGUlNICisJcmx3aW5tCXIzLHIzLDIsMCwzMQorCWxpcwlyNSxyZWZyZXNoX3JhdGVzQGgKKwlvcmkJcjUscjUscmVmcmVzaF9yYXRlc0BsCisJbHd6eAlyNSxyNSxyMwkJLyogZ2V0IHJlZnJlc2ggcmF0ZSBpbiBuU2VjICovCisJZGl2d3UJcjUscjUscjkJCS8qIGNhbGN1bGF0ZSAjIG9mIFNEQyBjbG9ja3MgKi8KKwlzdHcJcjUsU0RfUkVGUkVTSChyNCkJLyogU2V0IHJlZnJlc2ggcmF0ZSAqLworCXN5bmMKKworCS8qIFByb2dyYW0gU0QgVGltaW5nIFJlZ2lzdGVyICovCisKKwlsaQlyNywgMAkJLyogY2xlYXIgcjcgcHJpb3IgcGFyYW1ldGVyIGNvbGxlY3Rpb24gKi8KKworCVJFQURfU1BEKDIwKQkJLyogZ2V0IERJTU0gdHlwZTogUmVnaXN0ZXJlZCBvciBVbmJ1ZmZlcmVkICovCisJYmVxCXNwZF9yZWFkX2ZhaWwKKwlsaQlyNSwgRVJSX0RJTU1fVFlQRQorCWNtcGkJMCwwLHIzLFNQRF9VRElNTQorCWJlcQlkb19jbAorCWNtcGkJMCwwLHIzLFNQRF9SRElNTQorCWJuZQlzcGRfZmFpbAorCW9yaXMJcjcscjcsMHgxMDAwCS8qIHNldCBTRF9USU1JTkdbRElNTV9UWVBFXSBiaXQgKi8KKworZG9fY2w6CisJUkVBRF9TUEQoMTgpCQkvKiBHZXQgQ0FTIExhdGVuY3kgKi8KKwliZXEJc3BkX3JlYWRfZmFpbAorCWxpCXI1LEVSUl9DTF9WQUxVRQorCWFuZGkuCXI2LHIzLFNQRF9DQVNfMworCWJlcQljbF80CisJbGkJcjYsMworCWIJc2V0X2NsCitjbF80OgorCWFuZGkuCXI2LHIzLFNQRF9DQVNfNAorCWJlcQljbF81CisJbGkJcjYsNAorCWIJc2V0X2NsCitjbF81OgorCWFuZGkuCXI2LHIzLFNQRF9DQVNfNQorCWJlcQlzcGRfZmFpbAorCWxpCXI2LDUKK3NldF9jbDoKKwlybHdpbWkJcjcscjYsMjQsNSw3CisKKwlSRUFEX1NQRCgzMCkJCS8qIEdldCB0UkFTICovCisJYmVxCXNwZF9yZWFkX2ZhaWwKKwlkaXZ3dQlyNixyMyxyOQorCW11bGx3CXI4LHI2LHI5CisJc3ViZi4JcjgscjgscjMKKwliZXEJc2V0X3RyYXMKKwlhZGRpCXI2LHI2LDEKK3NldF90cmFzOgorCWxpIHI1LEVSUl9UUkFTX0ZBSUwKKwljbXBpCTAsMCxyNiwweDBGCS8qIG1heCBzdXBwb3J0ZWQgdmFsdWUgKi8KKwliZ3QJc3BkX2ZhaWwKKwlybHdpbWkJcjcscjYsMTYsMTIsMTUKKworCVJFQURfU1BEKDI5KQkvKiBHZXQgdFJDRCAqLworCWJlcQlzcGRfcmVhZF9mYWlsCisJLyogcmlnaHQgc2hpZnQgdFJDRCBieSAyIGJpdHMgYXMgcGVyIEREUjIgc3BlYyAqLworCXJsd2lubQlyMyxyMywzMCwyLDMxCisJZGl2d3UJcjYscjMscjkKKwltdWxsdwlyOCxyNixyOQorCXN1YmYuCXI4LHI4LHIzCisJYmVxCXNldF90cmNkCisJYWRkaQlyNixyNiwxCitzZXRfdHJjZDoKKwlsaQlyNSxFUlJfVFJDRF9GQUlMCisJY21waQkwLDAscjYsMHgwNwkvKiBtYXggc3VwcG9ydGVkIHZhbHVlICovCisJYmd0CXNwZF9mYWlsCisJcmx3aW1pCXI3LHI2LDEyLDE3LDE5CisKKwlSRUFEX1NQRCgyNykJLyogR2V0IHRSUCB2YWx1ZSAqLworCWJlcQlzcGRfcmVhZF9mYWlsCisJcmx3aW5tCXIzLHIzLDMwLDIsMzEJLyogcmlnaHQgc2hpZnQgdFJQIGJ5IDIgYml0cyBhcyBwZXIgRERSMiBzcGVjICovCisJZGl2d3UJcjYscjMscjkKKwltdWxsdwlyOCxyNixyOQorCXN1YmYuCXI4LHI4LHIzCisJYmVxCXNldF90cnAKKwlhZGRpCXI2LHI2LDEKK3NldF90cnA6CisJbGkJcjUsRVJSX1RSUF9GQUlMCisJY21waQkwLDAscjYsMHgwNwkvKiBtYXggc3VwcG9ydGVkIHZhbHVlICovCisJYmd0CXNwZF9mYWlsCisJcmx3aW1pCXI3LHI2LDgsMjEsMjMKKworCVJFQURfU1BEKDM2KQkvKiBHZXQgdFdSIHZhbHVlICovCisJYmVxCXNwZF9yZWFkX2ZhaWwKKwlybHdpbm0JcjMscjMsMzAsMiwzMQkvKiByaWdodCBzaGlmdCB0V1IgYnkgMiBiaXRzIGFzIHBlciBERFIyIHNwZWMgKi8KKwlkaXZ3dQlyNixyMyxyOQorCW11bGx3CXI4LHI2LHI5CisJc3ViZi4JcjgscjgscjMKKwliZXEJc2V0X3R3cgorCWFkZGkJcjYscjYsMQorc2V0X3R3cjoKKwlhZGRpCXI2LHI2LC0xCS8qIFRzaTEwOCBTREMgYWx3YXlzIGdpdmVzIG9uZSBleHRyYSBjbG9jayAqLworCWxpCXI1LEVSUl9UV1JfRkFJTAorCWNtcGkJMCwwLHI2LDB4MDcJLyogbWF4IHN1cHBvcnRlZCB2YWx1ZSAqLworCWJndAlzcGRfZmFpbAorCXJsd2ltaQlyNyxyNiw1LDI0LDI2CisKKwlSRUFEX1NQRCg0MikJLyogR2V0IHRSRkMgKi8KKwliZXEJc3BkX3JlYWRfZmFpbAorCWxpCXI1LCBFUlJfVFJGQ19GQUlMCisJLyogVHNpMTA4IHNwZWM6IHRSRkM9KHRSRkMgKyAxKS8yICovCisJYWRkaQlyMyxyMywxCisJcmx3aW5tLglyMyxyMywzMSwxLDMxCS8qIGRpdmlkZSBieSAyICovCisJYmVxCXNwZF9mYWlsCisJZGl2d3UJcjYscjMscjkKKwltdWxsdwlyOCxyNixyOQorCXN1YmYuCXI4LHI4LHIzCisJYmVxCXNldF90cmZjCisJYWRkaQlyNixyNiwxCitzZXRfdHJmYzoKKwljbXBpCTAsMCxyNiwweDFGCS8qIG1heCBzdXBwb3J0ZWQgdmFsdWUgKi8KKwliZ3QJc3BkX2ZhaWwKKwlybHdpbWkJcjcscjYsMCwyNywzMQorCisJc3R3CXI3LFNEX1RJTUlORyhyNCkKKwlzeW5jCisKKwkvKgorCSAqIFRoZSBmb2xsb3dpbmcgdHdvIHJlZ2lzdGVycyBhcmUgc2V0IG9uIHBlci1ESU1NIGJhc2lzLgorCSAqIFRoZSBTRF9SRUZSRVNIIGFuZCBTRF9USU1JTkcgc2V0dGluZ3MgYXJlIGNvbW1vbiBmb3IgYm90aCBESU1NUworCSAqLworCitkb19lYWNoX2RpbW06CisKKwkvKiBQcm9ncmFtIFNEUkFNIERJTU0gQ29udHJvbCBSZWdpc3RlciAqLworCisJbGkJcjcsIDAJCS8qIGNsZWFyIHI3IHByaW9yIHBhcmFtZXRlciBjb2xsZWN0aW9uICovCisKKwlSRUFEX1NQRCgxMykJCS8qIEdldCBQcmltYXJ5IFNEUkFNIFdpZHRoICovCisJYmVxCXNwZF9yZWFkX2ZhaWwKKwljbXBpCTAsMCxyMyw0CS8qIENoZWNrIGZvciA0LWJpdCBTRFJBTSAqLworCWJlcQlkb19uYmFuaworCW9yaXMJcjcscjcsMHgwMDEwCS8qIFNldCBNRU1fV0lEVEggYml0ICovCisKK2RvX25iYW5rOgorCVJFQURfU1BEKDE3KQkJLyogR2V0IE51bWJlciBvZiBiYW5rcyBvbiBTRFJBTSBkZXZpY2UgKi8KKwliZXEJc3BkX3JlYWRfZmFpbAorCS8qIEdyZW5kZWwgb25seSBkaXN0aW5ndWlzaCBiZXR3LiA0IG9yIDgtYmFuayBtZW1vcnkgcGFydHMgKi8KKwlsaQlyNSxFUlJfVU5LTk9XTl9QQVJUCS8qIG5vbi1zdXBwb3J0ZWQgbWVtb3J5IHBhcnQgKi8KKwljbXBpCTAsMCxyMyw0CisJYmVxCWRvX25yYW5rCisJY21waQkwLDAscjMsOAorCWJuZQlzcGRfZmFpbAorCW9yaQlyNyxyNywweDEwMDAKKworZG9fbnJhbms6CisJUkVBRF9TUEQoNSkJCS8qIEdldCAjIG9mIFJhbmtzICovCisJYmVxCXNwZF9yZWFkX2ZhaWwKKwlsaQlyNSxFUlJfTlJBTktfSU5WQUxJRAorCWFuZGkuCXI2LHIzLDB4NwkvKiBVc2UgYml0cyBbMi4uMF0gb25seSAqLworCWJlcQlkb19hZGRyX21vZGUKKwljbXBpCTAsMCxyNiwxCisJYmd0CXNwZF9mYWlsCisJcmx3aW1pCXI3LHI2LDgsMjMsMjMKKworZG9fYWRkcl9tb2RlOgorCVJFQURfU1BEKDQpCQkvKiBHZXQgIyBvZiBDb2x1bW4gQWRkcmVzc2VzICovCisJYmVxCXNwZF9yZWFkX2ZhaWwKKwlsaQlyNSwgRVJSX0FERFJfTU9ERQorCWFuZGkuCXIzLHIzLDB4MGYJLyogY3V0IG9mZiByZXNlcnZlZCBiaXRzICovCisJY21waQkwLDAscjMsOAorCWJsZQlzcGRfZmFpbAorCWNtcGkJMCwwLHIzLDE1CisJYmd0CXNwZF9mYWlsCisJYWRkaQlyNixyMywtOAkvKiBjYWxjdWxhdGUgQUREUl9NT0RFIHBhcmFtZXRlciAqLworCXJsd2ltaQlyNyxyNiw0LDI0LDI3CS8qIHNldCBBRERSX01PREUgZmllbGQgKi8KKworc2V0X2RpbW1fY3RybDoKKyNpZmRlZiBTRENfQVVUT1BSRUNIX0VOCisJb3JpcwlyNyxyNywweDAwMDEJLyogc2V0IGF1dG8gcHJlY2hhcmdlIEVOIGJpdCAqLworI2VuZGlmCisJb3JpCXI3LHI3LDEJCS8qIHNldCBFTkFCTEUgYml0ICovCisJY21waQkwLDAscjEwLFNQRF9ESU1NMAorCWJuZQkxZgorCXN0dwlyNyxTRF9EMF9DVFJMKHI0KQorCXN5bmMKKwliCXNldF9kaW1tX2JhcgorMToKKwlzdHcJcjcsU0RfRDFfQ1RSTChyNCkKKwlzeW5jCisKKworCS8qIFByb2dyYW0gU0RSQU0gRElNTXggQmFzZSBBZGRyZXNzIFJlZ2lzdGVyICovCisKK3NldF9kaW1tX2JhcjoKKwlSRUFEX1NQRCg1KQkJLyogZ2V0ICMgb2YgUmFua3MgKi8KKwliZXEJc3BkX3JlYWRfZmFpbAorCWFuZGkuCXI3LHIzLDB4NworCWFkZGkJcjcscjcsMQorCVJFQURfU1BEKDMxKQkJLyogUmVhZCBESU1NIHJhbmsgZGVuc2l0eSAqLworCWJlcQlzcGRfcmVhZF9mYWlsCisJcmx3aW5tCXI1LHIzLDI3LDI5LDMxCisJcmx3aW5tCXI2LHIzLDMsMjQsMjgKKwlvcglyNSxyNixyNQkvKiByNSA9IE5vcm1hbGl6ZWQgUmFuayBEZW5zaXR5IGJ5dGUgKi8KKwlsaXMJcjgsIDB4MDA4MAkvKiAxMjhNQiA+PiA0ICovCisJbXVsbHcJcjgscjgscjUJLyogcjggPSAocmFua19zaXplID4+IDQpICovCisJbXVsbHcJcjgscjgscjcJLyogcjggPSAoRElNTV9zaXplID4+IDQpICovCisJbmVnCXI3LHI4CisJcmx3aW5tCXI3LHI3LDI4LDQsMzEKKwlvcglyNyxyNyxyMTEJLyogc2V0IEFERFIgZmllbGQgKi8KKwlybHdpbm0JcjgscjgsMTIsMjAsMzEKKwlhZGQJcjExLHIxMSxyOAkvKiBzZXQgQmFzZSBBZGRyIGZvciBuZXh0IERJTU0gKi8KKworCWNtcGkJMCwwLHIxMCxTUERfRElNTTAKKwlibmUJc2V0X2RpbW0xX3NpemUKKwlzdHcJcjcsU0RfRDBfQkFSKHI0KQorCXN5bmMKKwlsaQlyMTAsU1BEX0RJTU0xCisJUkVBRF9TUEQoMCkKKwlibmUgZG9fZWFjaF9kaW1tCisJYiBzcGRfZG9uZQorCitzZXRfZGltbTFfc2l6ZToKKwlzdHcJcjcsU0RfRDFfQkFSKHI0KQorCXN5bmMKK3NwZF9kb25lOgorCWJscgorCitjaGVja19uZXh0X3Nsb3Q6CisJY21waQkwLDAscjEwLFNQRF9ESU1NMQorCWJlcQlzcGRfcmVhZF9mYWlsCisJbGkJcjEwLFNQRF9ESU1NMQorCWIJZG9fZmlyc3RfZGltbQorc3BkX3JlYWRfZmFpbDoKKwlvcmkJcjMscjAsMHhkZWFkCisJYgllcnJfaHVuZworc3BkX2ZhaWw6CisJbGkJcjMsMHgwYmFkCisJc3luYworZXJyX2h1bmc6CS8qIGhhbmcgaGVyZSBmb3IgZGVidWdnaW5nICovCisJbm9wCisJbm9wCisJYgllcnJfaHVuZworCisjZW5kaWYgLyogIVNEQ19IQVJEQ09ERURfSU5JVCAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBjNzQ0OGhwYzIvY29uZmlnLm1rIGIvYm9hcmQvbXBjNzQ0OGhwYzIvY29uZmlnLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNTg4NTgKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9tcGM3NDQ4aHBjMi9jb25maWcubWsKQEAgLTAsMCArMSwyOCBAQAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKworIyBGbGFzaCBhZGRyZXNzCitURVhUX0JBU0UgPSAweEZGMDAwMDAwCisjIFJBTSBhZGRyZXNzCisjVEVYVF9CQVNFID0gMHgwMDQwMDAwMAorCitQTEFURk9STV9DUFBGTEFHUyArPSAtRFRFWFRfQkFTRT0kKFRFWFRfQkFTRSkgLW1hbHRpdmVjIC1tYWJpPWFsdGl2ZWMgLW1zb2Z0LWZsb2F0CmRpZmYgLS1naXQgYS9ib2FyZC9tcGM3NDQ4aHBjMi9tcGM3NDQ4aHBjMi5jIGIvYm9hcmQvbXBjNzQ0OGhwYzIvbXBjNzQ0OGhwYzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2M5OWRlCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbXBjNzQ0OGhwYzIvbXBjNzQ0OGhwYzIuYwpAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFJveSBaYW5nIDx0aWUtZmVpLnphbmdAZnJlZXNjYWxlLmNvbT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiBtb2RpZmljYXRpb25zIGZvciB0aGUgVHNpMTA4IEVtdWwgQm9hcmQgYnkgYXZiQFR1bmRyYQorICovCisKKy8qCisgKiBib2FyZCBzdXBwb3J0L2luaXQgZnVuY3Rpb25zIGZvciB0aGUKKyAqIEZyZWVzY2FsZSBNUEM3NDQ4IEhQQzIgKEhpZ2gtUGVyZm9ybWFuY2UgQ29tcHV0aW5nIDIgUGxhdGZvcm0pLgorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDw3NHh4Xzd4eC5oPgorI2lmIGRlZmluZWQoQ09ORklHX09GX0ZMQVRfVFJFRSkKKyNpbmNsdWRlIDxmdF9idWlsZC5oPgorZXh0ZXJuIHZvaWQgZnRfY3B1X3NldHVwICh2b2lkICpibG9iLCBiZF90ICpiZCk7CisjZW5kaWYKKworI3VuZGVmCURFQlVHCisKK2V4dGVybiB2b2lkIGZsdXNoX2RhdGFfY2FjaGUgKHZvaWQpOworZXh0ZXJuIHZvaWQgaW52YWxpZGF0ZV9sMV9pbnN0cnVjdGlvbl9jYWNoZSAodm9pZCk7CitleHRlcm4gdm9pZCB0c2kxMDhfaW5pdF9mICh2b2lkKTsKKworaW50IGRpc3BsYXlfbWVtX21hcCAodm9pZCk7CisKK3ZvaWQgYWZ0ZXJfcmVsb2MgKHVsb25nIGRlc3RfYWRkcikKK3sKKwlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworCS8qCisJICogSnVtcCB0byB0aGUgbWFpbiBVLUJvb3QgYm9hcmQgaW5pdCBjb2RlCisJICovCisJYm9hcmRfaW5pdF9yICgoZ2RfdCAqKSBnZCwgZGVzdF9hZGRyKTsKKwkvKiBOT1RSRUFDSEVEICovCit9CisKKy8qCisgKiBDaGVjayBCb2FyZCBJZGVudGl0eToKKyAqIHJlcG9ydCBib2FyZCB0eXBlCisgKi8KKworaW50IGNoZWNrYm9hcmQgKHZvaWQpCit7CisJaW50IGxfdHlwZSA9IDA7CisKKwlwcmludGYgKCJCT0FSRDogJXNcbiIsIENGR19CT0FSRF9OQU1FKTsKKwlyZXR1cm4gKGxfdHlwZSk7Cit9CisKKy8qCisgKiBSZWFkIFByb2Nlc3NvciBJRDoKKyAqCisgKiByZXBvcnQgY2FsbGluZyBwcm9jZXNzb3IgbnVtYmVyCisgKi8KKworaW50IHJlYWRfcGlkICh2b2lkKQoreworCXJldHVybiAwOwkJLyogd2UgYXJlIG9uIHNpbmdsZSBDUFUgcGxhdGZvcm0gZm9yIGEgd2hpbGUgKi8KK30KKworbG9uZyBpbnQgZHJhbV9zaXplIChpbnQgYm9hcmRfdHlwZSkKK3sKKwlyZXR1cm4gMHgyMDAwMDAwMDsJLyogMjU2TSBieXRlcyAqLworfQorCitsb25nIGludCBpbml0ZHJhbSAoaW50IGJvYXJkX3R5cGUpCit7CisJcmV0dXJuIGRyYW1fc2l6ZSAoYm9hcmRfdHlwZSk7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19PRl9GTEFUX1RSRUUpICYmIGRlZmluZWQoQ09ORklHX09GX0JPQVJEX1NFVFVQKQordm9pZAorZnRfYm9hcmRfc2V0dXAgKHZvaWQgKmJsb2IsIGJkX3QgKmJkKQoreworCXUzMiAqcDsKKwlpbnQgbGVuOworCisJZnRfY3B1X3NldHVwIChibG9iLCBiZCk7CisKKwlwID0gZnRfZ2V0X3Byb3AgKGJsb2IsICIvbWVtb3J5L3JlZyIsICZsZW4pOworCWlmIChwICE9IE5VTEwpIHsKKwkJKnArKyA9IGNwdV90b19iZTMyIChiZC0+YmlfbWVtc3RhcnQpOworCQkqcCA9IGNwdV90b19iZTMyIChiZC0+YmlfbWVtc2l6ZSk7CisJfQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9ib2FyZC9tcGM3NDQ4aHBjMi90c2kxMDhfaW5pdC5jIGIvYm9hcmQvbXBjNzQ0OGhwYzIvdHNpMTA4X2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTdlZmVmCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbXBjNzQ0OGhwYzIvdHNpMTA4X2luaXQuYwpAQCAtMCwwICsxLDY2NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAoQykgQ29weXJpZ2h0IDIwMDM7ICBUdW5kcmEgU2VtaWNvbmR1Y3RvciBDb3JwLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEZJTEVOQU1FOiB0c2kxMDhfaW5pdC5jCisgKgorICogT3JpZ2luYXRvcjogQWxleCBCb3VuaW5lCisgKgorICogREVTQ1JJUFRJT046CisgKiBJbml0aWFsaXphdGlvbiBjb2RlIGZvciB0aGUgVHVuZHJhIFRzaTEwOCBicmlkZ2UgY2hpcAorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8NzR4eF83eHguaD4KKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDx2ZXJzaW9uLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPHRzaTEwOC5oPgorCitleHRlcm4gdm9pZCBtcGljSW5pdCAoaW50IHZlcmJvc2UpOworCisvKgorICogQ29uZmlndXJhdGlvbiBPcHRpb25zCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVsb25nIHVwcGVyOworCXVsb25nIGxvd2VyOworfSBQQjJPQ05fTFVUX0VOVFJZOworCitQQjJPQ05fTFVUX0VOVFJZIHBiMm9jbl9sdXQxWzMyXSA9IHsKKwkvKiAwIC0gNyAqLworCXsweDAwMDAwMDAwLCAweDAwMDAwMjAxfSwgLyogUEJBPTB4RTAwMF8wMDAwIC0+IFBDSS9YIChCeXRlLVN3YXApICovCisJezB4MDAwMDAwMDAsIDB4MDAwMDAyMDF9LCAvKiBQQkE9MHhFMTAwXzAwMDAgLT4gUENJL1ggKEJ5dGUtU3dhcCkgKi8KKwl7MHgwMDAwMDAwMCwgMHgwMDAwMDIwMX0sIC8qIFBCQT0weEUyMDBfMDAwMCAtPiBQQ0kvWCAoQnl0ZS1Td2FwKSAqLworCXsweDAwMDAwMDAwLCAweDAwMDAwMjAxfSwgLyogUEJBPTB4RTMwMF8wMDAwIC0+IFBDSS9YIChCeXRlLVN3YXApICovCisJezB4MDAwMDAwMDAsIDB4MDAwMDAyMDF9LCAvKiBQQkE9MHhFNDAwXzAwMDAgLT4gUENJL1ggKEJ5dGUtU3dhcCkgKi8KKwl7MHgwMDAwMDAwMCwgMHgwMDAwMDIwMX0sIC8qIFBCQT0weEU1MDBfMDAwMCAtPiBQQ0kvWCAoQnl0ZS1Td2FwKSAqLworCXsweDAwMDAwMDAwLCAweDAwMDAwMjAxfSwgLyogUEJBPTB4RTYwMF8wMDAwIC0+IFBDSS9YIChCeXRlLVN3YXApICovCisJezB4MDAwMDAwMDAsIDB4MDAwMDAyMDF9LCAvKiBQQkE9MHhFNzAwXzAwMDAgLT4gUENJL1ggKEJ5dGUtU3dhcCkgKi8KKworCS8qIDggLSAxNSAqLworCXsweDAwMDAwMDAwLCAweDAwMDAwMjAxfSwgLyogUEJBPTB4RTgwMF8wMDAwIC0+IFBDSS9YIChCeXRlLVN3YXApICovCisJezB4MDAwMDAwMDAsIDB4MDAwMDAyMDF9LCAvKiBQQkE9MHhFOTAwXzAwMDAgLT4gUENJL1ggKEJ5dGUtU3dhcCkgKi8KKwl7MHgwMDAwMDAwMCwgMHgwMDAwMDIwMX0sIC8qIFBCQT0weEVBMDBfMDAwMCAtPiBQQ0kvWCAoQnl0ZS1Td2FwKSAqLworCXsweDAwMDAwMDAwLCAweDAwMDAwMjAxfSwgLyogUEJBPTB4RUIwMF8wMDAwIC0+IFBDSS9YIChCeXRlLVN3YXApICovCisJezB4MDAwMDAwMDAsIDB4MDAwMDAyMDF9LCAvKiBQQkE9MHhFQzAwXzAwMDAgLT4gUENJL1ggKEJ5dGUtU3dhcCkgKi8KKwl7MHgwMDAwMDAwMCwgMHgwMDAwMDIwMX0sIC8qIFBCQT0weEVEMDBfMDAwMCAtPiBQQ0kvWCAoQnl0ZS1Td2FwKSAqLworCXsweDAwMDAwMDAwLCAweDAwMDAwMjAxfSwgLyogUEJBPTB4RUUwMF8wMDAwIC0+IFBDSS9YIChCeXRlLVN3YXApICovCisJezB4MDAwMDAwMDAsIDB4MDAwMDAyMDF9LCAvKiBQQkE9MHhFRjAwXzAwMDAgLT4gUENJL1ggKEJ5dGUtU3dhcCkgKi8KKworCS8qIDE2IC0gMjMgKi8KKwl7MHgwMDAwMDAwMCwgMHgwMDAwMDIwMX0sIC8qIFBCQT0weEYwMDBfMDAwMCAtPiBQQ0kvWCAoQnl0ZS1Td2FwKSAqLworCXsweDAwMDAwMDAwLCAweDAwMDAwMjAxfSwgLyogUEJBPTB4RjEwMF8wMDAwIC0+IFBDSS9YIChCeXRlLVN3YXApICovCisJezB4MDAwMDAwMDAsIDB4MDAwMDAyMDF9LCAvKiBQQkE9MHhGMjAwXzAwMDAgLT4gUENJL1ggKEJ5dGUtU3dhcCkgKi8KKwl7MHgwMDAwMDAwMCwgMHgwMDAwMDIwMX0sIC8qIFBCQT0weEYzMDBfMDAwMCAtPiBQQ0kvWCAoQnl0ZS1Td2FwKSAqLworCXsweDAwMDAwMDAwLCAweDAwMDAwMjAxfSwgLyogUEJBPTB4RjQwMF8wMDAwIC0+IFBDSS9YIChCeXRlLVN3YXApICovCisJezB4MDAwMDAwMDAsIDB4MDAwMDAyMDF9LCAvKiBQQkE9MHhGNTAwXzAwMDAgLT4gUENJL1ggKEJ5dGUtU3dhcCkgKi8KKwl7MHgwMDAwMDAwMCwgMHgwMDAwMDIwMX0sIC8qIFBCQT0weEY2MDBfMDAwMCAtPiBQQ0kvWCAoQnl0ZS1Td2FwKSAqLworCXsweDAwMDAwMDAwLCAweDAwMDAwMjAxfSwgLyogUEJBPTB4RjcwMF8wMDAwIC0+IFBDSS9YIChCeXRlLVN3YXApICovCisJLyogMjQgLSAzMSAqLworCXsweDAwMDAwMDAwLCAweDAwMDAwMjAxfSwgLyogUEJBPTB4RjgwMF8wMDAwIC0+IFBDSS9YIChCeXRlLVN3YXApICovCisJezB4MDAwMDAwMDAsIDB4MDAwMDAyMDF9LCAvKiBQQkE9MHhGOTAwXzAwMDAgLT4gUENJL1ggKEJ5dGUtU3dhcCkgKi8KKwl7MHgwMDAwMDAwMCwgMHgwMDAwMDIwMX0sIC8qIFBCQT0weEZBMDBfMDAwMCAtPiBQQ0kvWCAgUENJIEkvTyAoQnl0ZS1Td2FwKSAqLworCXsweDAwMDAwMDAwLCAweDAwMDAwMjAxfSwgLyogUEJBPTB4RkIwMF8wMDAwIC0+IFBDSS9YICBQQ0kgQ29uZmlnIChCeXRlLVN3YXApICovCisKKwl7MHgwMDAwMDAwMCwgMHgwMjAwMDI0MH0sIC8qIFBCQT0weEZDMDBfMDAwMCAtPiBITFAgKi8KKwl7MHgwMDAwMDAwMCwgMHgwMTAwMDI0MH0sIC8qIFBCQT0weEZEMDBfMDAwMCAtPiBITFAgKi8KKwl7MHgwMDAwMDAwMCwgMHgwMzAwMDI0MH0sIC8qIFBCQT0weEZFMDBfMDAwMCAtPiBITFAgKi8KKwl7MHgwMDAwMDAwMCwgMHgwMDAwMDI0MH0gIC8qIFBCQT0weEZGMDBfMDAwMCAtPiBITFAgOiAoVHJhbnNsYXRpb24gRW5hYmxlZCArIEJ5dGUtU3dhcCkqLworfTsKKworI2lmZGVmIENGR19DTEtfU1BSRUFECit0eXBlZGVmIHN0cnVjdCB7CisJdWxvbmcgY3RybDA7CisJdWxvbmcgY3RybDE7Cit9IFBMTF9DVFJMX1NFVDsKKworLyoKKyAqIENsb2NrIEdlbmVyYXRvciBTUExMMCBpbml0aWFsaXphdGlvbiB2YWx1ZXMKKyAqIFBMTDAgY29uZmlndXJhdGlvbiB0YWJsZSBmb3IgdmFyaW91cyBQQl9DTEtPIGZyZXEuCisgKiBVc2VzIHByZS1jYWxjdWxhdGVkIHZhbHVlcyBmb3IgRnMgPSAzMCBrSHosIEQgPSAwLjUlCisgKiBGb3V0IGRlcGVuZHMgb24gcmVxdWlyZWQgUEJfQ0xLTy4gQmFzZWQgb24gRnJlZiA9IDMzIE1IegorICovCisKK3N0YXRpYyBQTExfQ1RSTF9TRVQgcGxsMF9jb25maWdbOF0gPSB7CisJezB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAkvKiAwOiBieXBhc3MgKi8KKwl7MHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCS8qIDE6IHJlc2VydmVkICovCisJezB4MDA0MzAwNDQsIDB4MDAwMDAwNDN9LAkvKiAyOiBDR19QQl9DTEtPID0gMTgzIE1IeiAqLworCXsweDAwNWMwMDQ0LCAweDAwMDAwMDM5fSwJLyogMzogQ0dfUEJfQ0xLTyA9IDEwMCBNSHogKi8KKwl7MHgwMDVjMDA0NCwgMHgwMDAwMDAzOX0sCS8qIDQ6IENHX1BCX0NMS08gPSAxMzMgTUh6ICovCisJezB4MDA0YTAwNDQsIDB4MDAwMDAwNDB9LAkvKiA1OiBDR19QQl9DTEtPID0gMTY3IE1IeiAqLworCXsweDAwNWMwMDQ0LCAweDAwMDAwMDM5fSwJLyogNjogQ0dfUEJfQ0xLTyA9IDIwMCBNSHogKi8KKwl7MHgwMDRmMDA0NCwgMHgwMDAwMDAzZX0JLyogNzogQ0dfUEJfQ0xLTyA9IDIzMyBNSHogKi8KK307CisjZW5kaWYJLyogQ0ZHX0NMS19TUFJFQUQgKi8KKworLyoKKyAqIFByb3Nlc3NvciBCdXMgQ2xvY2sgKGluIE1IeikgZGVmaW5lZCBieSBDR19QQl9TRUxFQ1QKKyAqIChiYXNlZCBvbiByZWNvbW1lbmRlZCBUc2kxMDggcmVmZXJlbmNlIGNsb2NrIDMzTUh6KQorICovCitzdGF0aWMgaW50IHBiX2Nsa19zZWxbOF0gPSB7IDAsIDAsIDE4MywgMTAwLCAxMzMsIDE2NywgMjAwLCAyMzMgfTsKKworLyoKKyAqIGdldF9ib2FyZF9idXNfY2xrICgpCisgKgorICogcmV0dXJucyB0aGUgYnVzIGNsb2NrIGluIEh6LgorICovCit1bnNpZ25lZCBsb25nIGdldF9ib2FyZF9idXNfY2xrICh2b2lkKQoreworCXVsb25nIGk7CisKKwkvKiBEZXRlY3QgUEIgY2xvY2sgZnJlcS4gKi8KKwlpID0gaW4zMihDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X0NMS19SRUdfT0ZGU0VUICsgQ0dfUFdSVVBfU1RBVFVTKTsKKwlpID0gKGkgPj4gMTYpICYgMHgwNzsJLyogR2V0IFBCIFBMTCBtdWx0aXBsaWVyICovCisKKwlyZXR1cm4gcGJfY2xrX3NlbFtpXSAqIDEwMDAwMDA7Cit9CisKKy8qCisgKiBib2FyZF9lYXJseV9pbml0X2YgKCkKKyAqCisgKiBib2FyZC1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiBleGVjdXRlZCBmcm9tIGZsYXNoCisgKi8KKworaW50IGJvYXJkX2Vhcmx5X2luaXRfZiAodm9pZCkKK3sKKwlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKwl1bG9uZyBpOworCisJZ2QtPm1lbV9jbGsgPSAwOworCWkgPSBpbjMyIChDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X0NMS19SRUdfT0ZGU0VUICsKKwkJCUNHX1BXUlVQX1NUQVRVUyk7CisJaSA9IChpID4+IDIwKSAmIDB4MDc7CS8qIEdldCBHRCBQTEwgbXVsdGlwbGllciAqLworCXN3aXRjaCAoaSkgeworCWNhc2UgMDoJLyogZXh0ZXJuYWwgY2xvY2sgKi8KKwkJcHJpbnRmICgiVXNpbmcgZXh0ZXJuYWwgY2xvY2tcbiIpOworCQlicmVhazsKKwljYXNlIDE6CS8qIHN5c3RlbSBjbG9jayAqLworCQlnZC0+bWVtX2NsayA9IGdkLT5idXNfY2xrOworCQlicmVhazsKKwljYXNlIDQ6CS8qIDEzMyBNSHogKi8KKwljYXNlIDU6CS8qIDE2NiBNSHogKi8KKwljYXNlIDY6CS8qIDIwMCBNSHogKi8KKwkJZ2QtPm1lbV9jbGsgPSBwYl9jbGtfc2VsW2ldICogMTAwMDAwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRmICgiSW52YWxpZCBERFIyIGNsb2NrIHNldHRpbmdcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCXByaW50ZiAoIkJVUzogJWQgTUh6XG4iLCBnZXRfYm9hcmRfYnVzX2NsaygpIC8gMTAwMDAwMCk7CisJcHJpbnRmICgiTUVNOiAlZCBNSHpcbiIsIGdkLT5tZW1fY2xrIC8gMTAwMDAwMCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBib2FyZF9lYXJseV9pbml0X3IoKSAtIFRzaTEwOCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBleGVjdXRlZCByaWdodCBhZnRlcgorICogcmVsb2NhdGlvbi4gQ29udGFpbnMgY29kZSB0aGF0IGNhbm5vdCBiZSBleGVjdXRlZCBmcm9tIGZsYXNoLgorICovCisKK2ludCBib2FyZF9lYXJseV9pbml0X3IgKHZvaWQpCit7CisJdWxvbmcgdGVtcCwgaTsKKwl1bG9uZyByZWdfdmFsOworCXZvbGF0aWxlIHVsb25nICpyZWdfcHRyOworCisJcmVnX3B0ciA9CisJCSh1bG9uZyAqKSAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9QQl9SRUdfT0ZGU0VUICsgMHg5MDApOworCisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKwkJKnJlZ19wdHIrKyA9IDB4MDAwMDAyMDE7CS8qIFNXQVAgRU5BQkxFRCAqLworCQkqcmVnX3B0cisrID0gMHgwMDsKKwl9CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImVpZWlvIik7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzeW5jIik7CisKKwkvKiBTZXR1cCBQQl9PQ05fQkFSMjogc2l6ZSAyNTZCICsgRU5hYmxlIEAgMHgwXzgwMDAwMDAwICovCisKKwlvdXQzMiAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9QQl9SRUdfT0ZGU0VUICsgUEJfT0NOX0JBUjIsCisJCTB4ODAwMDAwMDEpOworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luYyIpOworCisJLyogTWFrZSBzdXJlIHRoYXQgT0NOX0JBUjIgZGVjb2RlciBpcyBzZXQgKHRvIGFsbG93IGZvbGxvd2luZyBpbW1lZGlhdGUKKwkgKiByZWFkIGZyb20gU0RSQU0pCisJICovCisKKwl0ZW1wID0gaW4zMihDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X1BCX1JFR19PRkZTRVQgKyBQQl9PQ05fQkFSMik7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzeW5jIik7CisKKwkvKgorCSAqIFJlbWFwIFBCX09DTl9CQVIxIHRvIGFjY29tb2RhdGUgUENJLWJ1cyBhcGVydHVyZSBhbmQgRVBST00gaW50byB0aGUKKwkgKiBwcm9jZXNzb3IgYnVzIGFkZHJlc3Mgc3BhY2UuIEltbWVkaWF0ZWx5IGFmdGVyIHJlc2V0IExVVCBhbmQgYWRkcmVzcworCSAqIHRyYW5zbGF0aW9uIGFyZSBkaXNhYmxlZCBmb3IgdGhpcyBCQVIuIE5vdyB3ZSBoYXZlIHRvIGluaXRpYWxpemUgTFVUCisJICogYW5kIHN3aXRjaCBmcm9tIHRoZSBCT09UIG1vZGUgdG8gdGhlIG5vcm1hbCBvcGVyYXRpb24gbW9kZS4KKwkgKgorCSAqIFRoZSBhcGVydHVyZSBkZWZpbmVkIGJ5IFBCX09DTl9CQVIxIHN0YXJ0ZXMgYXQgYWRkcmVzcyAweEUwMDAwMDAwCisJICogYW5kIGNvdmVycyA1MTJNQiBvZiBhZGRyZXNzIHNwYWNlLiBUbyBhbGxvdyBsYXJnZXIgYXBlcnR1cmUgd2UgYWxzbworCSAqIGhhdmUgdG8gcmVsb2NhdGUgcmVnaXN0ZXIgd2luZG93IG9mIFRzaTEwOAorCSAqCisJICogSW5pdGlhbGl6ZSBMVVQgKDMyLWVudHJpZXMpIHByaW9yIHN3aXRjaGluZyBQQl9PQ05fQkFSMSBmcm9tIEJPT1QKKwkgKiBtb2RlLgorCSAqCisJICogaW5pdGlhbGl6ZSBwb2ludGVyIHRvIExVVCBhc3NvY2lhdGVkIHdpdGggUEJfT0NOX0JBUjEKKwkgKi8KKwlyZWdfcHRyID0KKwkJKHVsb25nICopIChDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X1BCX1JFR19PRkZTRVQgKyAweDgwMCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQkqcmVnX3B0cisrID0gcGIyb2NuX2x1dDFbaV0ubG93ZXI7CisJCSpyZWdfcHRyKysgPSBwYjJvY25fbHV0MVtpXS51cHBlcjsKKwl9CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN5bmMiKTsKKworCS8qIEJhc2UgYWRkcmVzc2VzIGZvciBDUzAsIENTMSwgQ1MyLCBDUzMgKi8KKworCW91dDMyIChDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X0hMUF9SRUdfT0ZGU0VUICsgSExQX0IwX0FERFIsCisJCTB4MDAwMDAwMDApOworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luYyIpOworCisJb3V0MzIgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfSExQX1JFR19PRkZTRVQgKyBITFBfQjFfQUREUiwKKwkJMHgwMDEwMDAwMCk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzeW5jIik7CisKKwlvdXQzMiAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9ITFBfUkVHX09GRlNFVCArIEhMUF9CMl9BRERSLAorCQkweDAwMjAwMDAwKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN5bmMiKTsKKworCW91dDMyIChDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X0hMUF9SRUdfT0ZGU0VUICsgSExQX0IzX0FERFIsCisJCTB4MDAzMDAwMDApOworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luYyIpOworCisJLyogTWFza3MgZm9yIEhMUCBiYW5rcyAqLworCisJb3V0MzIgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfSExQX1JFR19PRkZTRVQgKyBITFBfQjBfTUFTSywKKwkJMHhGRkYwMDAwMCk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzeW5jIik7CisKKwlvdXQzMiAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9ITFBfUkVHX09GRlNFVCArIEhMUF9CMV9NQVNLLAorCQkweEZGRjAwMDAwKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN5bmMiKTsKKworCW91dDMyIChDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X0hMUF9SRUdfT0ZGU0VUICsgSExQX0IyX01BU0ssCisJCTB4RkZGMDAwMDApOworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luYyIpOworCisJb3V0MzIgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfSExQX1JFR19PRkZTRVQgKyBITFBfQjNfTUFTSywKKwkJMHhGRkYwMDAwMCk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzeW5jIik7CisKKwkvKiBTZXQgQ1RSTDAgdmFsdWVzIGZvciBiYW5rcyAqLworCisJb3V0MzIgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfSExQX1JFR19PRkZTRVQgKyBITFBfQjBfQ1RSTDAsCisJCTB4N0ZGQzQ0QzIpOworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luYyIpOworCisJb3V0MzIgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfSExQX1JFR19PRkZTRVQgKyBITFBfQjFfQ1RSTDAsCisJCTB4N0ZGQzQ0QzApOworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luYyIpOworCisJb3V0MzIgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfSExQX1JFR19PRkZTRVQgKyBITFBfQjJfQ1RSTDAsCisJCTB4N0ZGQzQ0QzApOworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luYyIpOworCisJb3V0MzIgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfSExQX1JFR19PRkZTRVQgKyBITFBfQjNfQ1RSTDAsCisJCTB4N0ZGQzQ0QzIpOworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luYyIpOworCisJLyogU2V0IGJhbmtzIHRvIGxhdGNoZWQgbW9kZSwgZW5hYmxlZCwgYW5kIG90aGVyIGRlZmF1bHQgc2V0dGluZ3MgKi8KKworCW91dDMyIChDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X0hMUF9SRUdfT0ZGU0VUICsgSExQX0IwX0NUUkwxLAorCQkweDdDMEYyMDAwKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN5bmMiKTsKKworCW91dDMyIChDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X0hMUF9SRUdfT0ZGU0VUICsgSExQX0IxX0NUUkwxLAorCQkweDdDMEYyMDAwKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN5bmMiKTsKKworCW91dDMyIChDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X0hMUF9SRUdfT0ZGU0VUICsgSExQX0IyX0NUUkwxLAorCQkweDdDMEYyMDAwKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN5bmMiKTsKKworCW91dDMyIChDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X0hMUF9SRUdfT0ZGU0VUICsgSExQX0IzX0NUUkwxLAorCQkweDdDMEYyMDAwKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN5bmMiKTsKKworCS8qCisJICogU2V0IG5ldyB2YWx1ZSBmb3IgUEJfT0NOX0JBUjE6IHN3aXRjaCBmcm9tIEJPT1QgdG8gTFVUIG1vZGUuCisJICogdmFsdWUgZm9yIFBCX09DTl9CQVIxOiAoQkEtMHhFMDAwXzAwMDAgKyBzaXplIDUxMk1CICsgRU5hYmxlKQorCSAqLworCW91dDMyIChDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X1BCX1JFR19PRkZTRVQgKyBQQl9PQ05fQkFSMSwKKwkJMHhFMDAwMDAxMSk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzeW5jIik7CisKKwkvKiBNYWtlIHN1cmUgdGhhdCBPQ05fQkFSMiBkZWNvZGVyIGlzIHNldCAodG8gYWxsb3cgZm9sbG93aW5nCisJICogaW1tZWRpYXRlIHJlYWQgZnJvbSBTRFJBTSkKKwkgKi8KKworCXRlbXAgPSBpbjMyKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfUEJfUkVHX09GRlNFVCArIFBCX09DTl9CQVIxKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN5bmMiKTsKKworCS8qCisJICogU1JJOiBBdCB0aGlzIHBvaW50IHdlIGhhdmUgZW5hYmxlZCB0aGUgSExQIGJhbmtzLiBUaGF0IG1lYW5zIHdlIGNhbgorCSAqIG5vdyByZWFkIGZyb20gdGhlIE5WUkFNIGFuZCBpbml0aWFsaXplIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCisJICogV2Ugd2lsbCBvdmVyLXJpZGUgdGhlIGVudl9pbml0IGNhbGxlZCBpbiBib2FyZF9pbml0X2YKKwkgKiBUaGlzIGlzIHJlYWxseSBhIHdvcmstYXJvdW5kIGJlY2F1c2UsIHRoZSBITFAgYmFuayAxCisJICogd2hlcmUgTlZSQU0gcmVzaWRlcyBpcyBub3QgdmlzaWJsZSBkdXJpbmcgYm9hcmRfaW5pdF9mCisJICogKGxpYl9wcGMvYm9hcmQuYykKKwkgKiBBbHRlcm5hdGl2ZWx5LCB3ZSBjb3VsZCB1c2UgdGhlIEkyQyBFRVBST00gYXQgc3RhcnQtdXAgdG8gY29uZmlndXJlCisJICogYW5kIGVuYWJsZSBhbGwgSExQIGJhbmtzIGFuZCBub3QganVzdCBITFAgMCBhcyBpcyBiZWluZyBkb25lIGZvcgorCSAqIFRhaWdhIFJldi4gMi4KKwkgKi8KKworCWVudl9pbml0ICgpOworCisjaWZuZGVmIERJU0FCTEVfUEJNCisKKwkvKgorCSAqIEZvciBJQk0gcHJvY2Vzc29ycyB3ZSBoYXZlIHRvIHNldCBBZGRyZXNzLU9ubHkgY29tbWFuZHMgZ2VuZXJhdGVkCisJICogYnkgUEJNIHRoYXQgYXJlIGRpZmZlcmVudCBmcm9tIG9uZXMgc2V0IGFmdGVyIHJlc2V0LgorCSAqLworCisJdGVtcCA9IGdldF9jcHVfdHlwZSAoKTsKKworCWlmICgoQ1BVXzc1MEZYID09IHRlbXApIHx8IChDUFVfNzUwR1ggPT0gdGVtcCkpCisJCW91dDMyIChDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X1BCX1JFR19PRkZTRVQgKyBQQl9NQ01ELAorCQkJMHgwMDAwOTk1NSk7CisjZW5kaWYJLyogRElTQUJMRV9QQk0gKi8KKworI2lmZGVmIENPTkZJR19QQ0kKKwkvKgorCSAqIEluaXRpYWxpemUgUENJL1ggYmxvY2sKKwkgKi8KKworCS8qIE1hcCBQQ0kvWCBDb25maWd1cmF0aW9uIFNwYWNlICgxNk1CIEAgMHgwX0ZFMDAwMDAwKSAqLworCW91dDMyIChDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X1BDSV9SRUdfT0ZGU0VUICsKKwkJUENJX1BGQUJfQkFSMF9VUFBFUiwgMCk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzeW5jIik7CisKKwlvdXQzMiAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9QQ0lfUkVHX09GRlNFVCArIFBDSV9QRkFCX0JBUjAsCisJCTB4RkIwMDAwMDEpOworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luYyIpOworCisJLyogU2V0IEJ1cyBOdW1iZXIgZm9yIHRoZSBhdHRhY2hlZCBQQ0kvWCBidXMgKHdlIHdpbGwgdXNlIDAgZm9yIE5CKSAqLworCisJdGVtcCA9CWluMzIoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArCisJCVRTSTEwOF9QQ0lfUkVHX09GRlNFVCArIFBDSV9QQ0lYX1NUQVQpOworCisJdGVtcCAmPSB+MHhGRjAwOwkvKiBDbGVhciB0aGUgQlVTX05VTSBmaWVsZCAqLworCisJb3V0MzIgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfUENJX1JFR19PRkZTRVQgKyBQQ0lfUENJWF9TVEFULAorCQl0ZW1wKTsKKworCS8qIE1hcCBQQ0kvWCBJTyBTcGFjZSAoNjRLQiBAIDB4MF9GRDAwMDAwMCkgdGFrZXMgb25lIDE2TUIgTFVUIGVudHJ5ICovCisKKwlvdXQzMiAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9QQ0lfUkVHX09GRlNFVCArIFBDSV9QRkFCX0lPX1VQUEVSLAorCQkwKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN5bmMiKTsKKworCS8qIFRoaXMgcmVnaXN0ZXIgaXMgb24gdGhlIFBDSSBzaWRlIHRvIGludGVycHJldCB0aGUgYWRkcmVzcyBpdCByZWNlaXZlcworCSAqIGFuZCBtYXBzIGl0IGFzIGEgSU8gYWRkcmVzcy4KKwkgKi8KKworCW91dDMyIChDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X1BDSV9SRUdfT0ZGU0VUICsgUENJX1BGQUJfSU8sCisJCTB4RkEwMDAwMDEpOworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luYyIpOworCisJLyoKKwkgKiBNYXAgUENJL1ggTWVtb3J5IFNwYWNlCisJICoKKwkgKiBUcmFuc2FjdGlvbnMgZGlyZWN0ZWQgZnJvbSBPQ00gdG8gUENJIE1lbW9yeSBTcGFjZSBhcmUgZGlyZWN0ZWQKKwkgKiBmcm9tIFBCIHRvIFBDSQorCSAqIHVuY2hhbmdlZCAoYXMgZGVmaW5lZCBieSBQQl9PQ05fQkFSMSwyIGFuZCBMVVQgc2V0dGluZ3MpLgorCSAqIElmIGFkZHJlc3MgcmVtYXBwaW5nIGlzIHJlcXVpcmVkIHRoZSBjb3JyZXNwb25kaW5nIFBDSV9QRkFCX01FTTMyCisJICogYW5kIFBDSV9QRkFCX1BGTXggcmVnaXN0ZXIgZ3JvdXBzIGhhdmUgdG8gYmUgY29uZmlndXJlZC4KKwkgKgorCSAqIE1hcCB0aGUgcGF0aCBmcm9tIHRoZSBQQ0kvWCBidXMgaW50byB0aGUgc3lzdGVtIG1lbW9yeQorCSAqCisJICogVGhlIG1lbW9yeSBtYXBwZWQgd2luZG93IGFzc290aWF0ZWQgd2l0aCBQQ0kgUDJPX0JBUjIgcHJvdmlkZXMKKwkgKiBhY2Nlc3MgdG8gdGhlIHN5c3RlbSBtZW1vcnkgd2l0aG91dCBhZGRyZXNzIHJlbWFwcGluZy4KKwkgKiBBbGwgc3lzdGVtIG1lbW9yeSBpcyBvcGVuZWQgZm9yIGFjY2Vzc2VzIGluaXRpYXRlZCBieSBQQ0kvWCBidXMKKwkgKiBtYXN0ZXJzLgorCSAqCisJICogSW5pdGlhbGl6ZSBMVVQgYXNzb2NpYXRlZCB3aXRoIFBDSSBQMk9fQkFSMgorCSAqCisJICogc2V0IHBvaW50ZXIgdG8gTFVUIGFzc29jaWF0ZWQgd2l0aCBQQ0kgUDJPX0JBUjIKKwkgKi8KKworCXJlZ19wdHIgPQorCQkodWxvbmcgKikgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfUENJX1JFR19PRkZTRVQgKyAweDUwMCk7CisKKyNpZmRlZiBESVNBQkxFX1BCTQorCisJLyogSW4gY2FzZSB3aGVuIFBCTSBpcyBkaXNhYmxlZCAobm8gSFcgc3VwcG9ydGVkIGNhY2hlIHNub29wbmcgb24gUEIpCisJICogUDJPX0JBUjIgaXMgZGlyZWN0bHkgbWFwcGVkIGludG8gdGhlIHN5c3RlbSBtZW1vcnkgd2l0aG91dCBhZGRyZXNzCisJICogdHJhbnNsYXRpb24uCisJICovCisKKwlyZWdfdmFsID0gMHgwMDAwMDAwNDsJLyogU0RSQU0gcG9ydCArIE5PIEFkZHJfVHJhbnNsYXRpb24gKi8KKworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCSpyZWdfcHRyKysgPSByZWdfdmFsOwkvKiBQMk9fQkFSMl9MVVR4ICovCisJCSpyZWdfcHRyKysgPSAwOwkJLyogUDJPX0JBUjJfTFVUX1VQUEVSeCAqLworCX0KKworCS8qIHZhbHVlIGZvciBQQ0kgQkFSMiAoc2l6ZSA9IDUxMk1CLCBFbmFibGVkLCBObyBBZGRyLiBUcmFuc2xhdGlvbikgKi8KKwlyZWdfdmFsID0gMHgwMDAwNzUwMDsKKyNlbHNlCisKKwlyZWdfdmFsID0gMHgwMDAwMDAwMjsJLyogRGVzdGluYXRpb24gcG9ydCA9IFBCTSAqLworCisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKwkJKnJlZ19wdHIrKyA9IHJlZ192YWw7CS8qIFAyT19CQVIyX0xVVHggKi8KKy8qIFAyT19CQVIyX0xVVF9VUFBFUnggOiBTZXQgZGF0YSBzd2FwcGluZyBtb2RlIGZvciBQQk0gKGJ5dGUgc3dhcHBpbmcpICovCisJCSpyZWdfcHRyKysgPSAweDQwMDAwMDAwOworLyogb2Zmc2V0ID0gMTZNQiwgYWRkcmVzcyB0cmFuc2xhdGlvbiBpcyBlbmFibGVkIHRvIGFsbG93IGJ5dGUgc3dhcHBpbmcgKi8KKwkJcmVnX3ZhbCArPSAweDAxMDAwMDAwOworCX0KKworLyogdmFsdWUgZm9yIFBDSSBCQVIyIChzaXplID0gNTEyTUIsIEVuYWJsZWQsIEFkZHJlc3MgVHJhbnNsYXRpb24gRW5hYmxlZCkgKi8KKwlyZWdfdmFsID0gMHgwMDAwNzEwMDsKKyNlbmRpZgorCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJlaWVpbyIpOworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luYyIpOworCisJb3V0MzIgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfUENJX1JFR19PRkZTRVQgKyBQQ0lfUDJPX1BBR0VfU0laRVMsCisJCXJlZ192YWwpOworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luYyIpOworCisJLyogU2V0IDY0LWJpdCBQQ0kgYnVzIGFkZHJlc3MgZm9yIHN5c3RlbSBtZW1vcnkKKwkgKiAoIDAgaXMgdGhlIGJlc3QgY2hvaWNlIGZvciBlYXN5IG1hcHBpbmcpCisJICovCisKKwlvdXQzMiAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9QQ0lfUkVHX09GRlNFVCArIFBDSV9QMk9fQkFSMiwKKwkJMHgwMDAwMDAwMCk7CisJb3V0MzIgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfUENJX1JFR19PRkZTRVQgKyBQQ0lfUDJPX0JBUjJfVVBQRVIsCisJCTB4MDAwMDAwMDApOworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luYyIpOworCisjaWZuZGVmIERJU0FCTEVfUEJNCisJLyoKKwkgKiAgVGhlIG1lbW9yeSBtYXBwZWQgd2luZG93IGFzc290aWF0ZWQgd2l0aCBQQ0kgUDJPX0JBUjMgcHJvdmlkZXMKKwkgKiAgYWNjZXNzIHRvIHRoZSBzeXN0ZW0gbWVtb3J5IHVzaW5nIFNEUkFNIE9DTiBwb3J0IGFuZCBhZGRyZXNzCisJICogIHRyYW5zbGF0aW9uLiBUaGlzIGlzIGFsdGVybmF0aXZlIHdheSB0byBhY2Nlc3MgU0RSQU0gZnJvbSBQQ0kKKwkgKiAgcmVxdWlyZWQgZm9yIFRzaTEwOCBlbXVsYXRpb24gdGVzdGluZy4KKwkgKiAgQWxsIHN5c3RlbSBtZW1vcnkgaXMgb3BlbmVkIGZvciBhY2Nlc3NlcyBpbml0aWF0ZWQgYnkKKwkgKiAgUENJL1ggYnVzIG1hc3RlcnMuCisJICoKKwkgKiAgSW5pdGlhbGl6ZSBMVVQgYXNzb2NpYXRlZCB3aXRoIFBDSSBQMk9fQkFSMworCSAqCisJICogIHNldCBwb2ludGVyIHRvIExVVCBhc3NvY2lhdGVkIHdpdGggUENJIFAyT19CQVIzCisJICovCisJcmVnX3B0ciA9CisJCSh1bG9uZyAqKSAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9QQ0lfUkVHX09GRlNFVCArIDB4NjAwKTsKKworCXJlZ192YWwgPSAweDAwMDAwMDA0OwkvKiBEZXN0aW5hdGlvbiBwb3J0ID0gU0RDICovCisKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQkqcmVnX3B0cisrID0gcmVnX3ZhbDsJLyogUDJPX0JBUjNfTFVUeCAqLworCisvKiBQMk9fQkFSM19MVVRfVVBQRVJ4IDogU2V0IGRhdGEgc3dhcHBpbmcgbW9kZSBmb3IgUEJNIChieXRlIHN3YXBwaW5nKSAqLworCQkqcmVnX3B0cisrID0gMDsKKworLyogb2Zmc2V0ID0gMTZNQiwgYWRkcmVzcyB0cmFuc2xhdGlvbiBpcyBlbmFibGVkIHRvIGFsbG93IGJ5dGUgc3dhcHBpbmcgKi8KKwkJcmVnX3ZhbCArPSAweDAxMDAwMDAwOworCX0KKworCV9fYXNtX18gX192b2xhdGlsZV9fICgiZWllaW8iKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN5bmMiKTsKKworCS8qIENvbmZpZ3VyZSBQQ0kgUDJPX0JBUjMgKHNpemUgPSA1MTJNQiwgRW5hYmxlZCkgKi8KKworCXJlZ192YWwgPQorCQlpbjMyKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfUENJX1JFR19PRkZTRVQgKworCQkgUENJX1AyT19QQUdFX1NJWkVTKTsKKwlyZWdfdmFsICY9IH4weDAwRkY7CisJcmVnX3ZhbCB8PSAweDAwNzE7CisJb3V0MzIgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfUENJX1JFR19PRkZTRVQgKyBQQ0lfUDJPX1BBR0VfU0laRVMsCisJCXJlZ192YWwpOworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luYyIpOworCisJLyogU2V0IDY0LWJpdCBiYXNlIFBDSSBidXMgYWRkcmVzcyBmb3Igd2luZG93ICgweDIwMDAwMDAwKSAqLworCisJb3V0MzIgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfUENJX1JFR19PRkZTRVQgKyBQQ0lfUDJPX0JBUjNfVVBQRVIsCisJCTB4MDAwMDAwMDApOworCW91dDMyIChDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X1BDSV9SRUdfT0ZGU0VUICsgUENJX1AyT19CQVIzLAorCQkweDIwMDAwMDAwKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN5bmMiKTsKKworI2VuZGlmCS8qICFESVNBQkxFX1BCTSAqLworCisjaWZkZWYgRU5BQkxFX1BDSV9DU1JfQkFSCisJLyogb3BlbiBpZiByZXF1aXJlZCBhY2Nlc3MgdG8gVHNpMTA4IENTUnMgZnJvbSB0aGUgUENJL1ggYnVzICovCisJLyogZW5hYmxlIEJBUjAgb24gdGhlIFBDSS9YIGJ1cyAqLworCXJlZ192YWwgPSBpbjMyKENGR19UU0kxMDhfQ1NSX0JBU0UgKworCQlUU0kxMDhfUENJX1JFR19PRkZTRVQgKyBQQ0lfTUlTQ19DU1IpOworCXJlZ192YWwgfD0gMHgwMjsKKwlvdXQzMiAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9QQ0lfUkVHX09GRlNFVCArIFBDSV9NSVNDX0NTUiwKKwkJcmVnX3ZhbCk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzeW5jIik7CisKKwlvdXQzMiAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9QQ0lfUkVHX09GRlNFVCArIFBDSV9QMk9fQkFSMF9VUFBFUiwKKwkJMHgwMDAwMDAwMCk7CisJb3V0MzIgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfUENJX1JFR19PRkZTRVQgKyBQQ0lfUDJPX0JBUjAsCisJCUNGR19UU0kxMDhfQ1NSX0JBU0UpOworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luYyIpOworCisjZW5kaWYKKworCS8qCisJICogRmluYWxseSBlbmFibGUgUENJL1ggQnVzIE1hc3RlciBhbmQgTWVtb3J5IFNwYWNlIGFjY2VzcworCSAqLworCisJcmVnX3ZhbCA9IGluMzIoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9QQ0lfUkVHX09GRlNFVCArIFBDSV9DU1IpOworCXJlZ192YWwgfD0gMHgwNjsKKwlvdXQzMiAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9QQ0lfUkVHX09GRlNFVCArIFBDSV9DU1IsIHJlZ192YWwpOworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luYyIpOworCisjZW5kaWYJLyogQ09ORklHX1BDSSAqLworCisJLyoKKwkgKiBJbml0aWFsaXplIE1QSUMgb3V0cHV0cyAoaW50ZXJydXB0IHBpbnMpOgorCSAqIEludGVycnVwdCByb3V0aW5nIG9uIHRoZSBHcmVuZGVsIEVtdWwuIEJvYXJkOgorCSAqIFBCX0lOVFswXSAtPiBJTlQgKENQVTApCisJICogUEJfSU5UWzFdIC0+IElOVCAoQ1BVMSkKKwkgKiBQQl9JTlRbMl0gLT4gTUNQIChDUFUwKQorCSAqIFBCX0lOVFszXSAtPiBNQ1AgKENQVTEpCisJICogU2V0IGludGVycnVwdCBjb250cm9sbGVyIG91dHB1dHMgYXMgTGV2ZWxfU2Vuc2l0aXZlL0FjdGl2ZV9Mb3cKKwkgKi8KKwlvdXQzMiAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9NUElDX1JFR19PRkZTRVQgKyBNUElDX0NTUigwKSwgMHgwMik7CisJb3V0MzIgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfTVBJQ19SRUdfT0ZGU0VUICsgTVBJQ19DU1IoMSksIDB4MDIpOworCW91dDMyIChDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X01QSUNfUkVHX09GRlNFVCArIE1QSUNfQ1NSKDIpLCAweDAyKTsKKwlvdXQzMiAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9NUElDX1JFR19PRkZTRVQgKyBNUElDX0NTUigzKSwgMHgwMik7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzeW5jIik7CisKKwkvKgorCSAqIEVuc3VyZSB0aGF0IE1hY2hpbmUgQ2hlY2sgZXhjZXB0aW9uIGlzIGVuYWJsZWQKKwkgKiBXZSBuZWVkIGl0IHRvIHN1cHBvcnQgUENJIEJ1cyBwcm9iaW5nIChjb25maWd1cmF0aW9uIHJlYWRzKQorCSAqLworCisJcmVnX3ZhbCA9IG1mbXNyICgpOworCW10bXNyKHJlZ192YWwgfCBNU1JfTUUpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBOZWVkZWQgdG8gcHJpbnQgb3V0IEwyIGNhY2hlIGluZm8KKyAqIHVzZWQgaW4gdGhlIG1pc2NfaW5pdF9yIGZ1bmN0aW9uCisgKi8KKwordW5zaWduZWQgbG9uZyBnZXRfbDJjciAodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGwyY29udHJvbHJlZzsKKwlhc20gdm9sYXRpbGUgKCJtZnNwciAlMCwgMTAxNyI6Ij1yIiAobDJjb250cm9scmVnKTopOworCXJldHVybiBsMmNvbnRyb2xyZWc7Cit9CisKKy8qCisgKiBtaXNjX2luaXRfcigpCisgKgorICogdmFyaW91cyB0aGluZ3MgdG8gZG8gYWZ0ZXIgcmVsb2NhdGlvbgorICoKKyAqLworCitpbnQgbWlzY19pbml0X3IgKHZvaWQpCit7CisJREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisjaWZkZWYgQ0ZHX0NMS19TUFJFQUQJLyogSW5pdGlhbGl6ZSBTcHJlYWQtU3BlY3RydW0gQ2xvY2sgZ2VuZXJhdGlvbiAqLworCXVsb25nIGk7CisKKwkvKiBFbnN1cmUgdGhhdCBTcHJlYWQtU3BlY3RydW0gaXMgZGlzYWJsZWQgKi8KKwlvdXQzMiAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9DTEtfUkVHX09GRlNFVCArIENHX1BMTDBfQ1RSTDAsIDApOworCW91dDMyIChDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X0NMS19SRUdfT0ZGU0VUICsgQ0dfUExMMV9DVFJMMCwgMCk7CisKKwkvKiBJbml0aWFsaXplIFBMTDE6IENHX1BDSV9DTEsgLCBpbnRlcm5hbCBPQ05fQ0xLCisJICogVXNlcyBwcmUtY2FsY3VsYXRlZCB2YWx1ZSBmb3IgRm91dCA9IDgwMCBNSHosIEZzID0gMzAga0h6LCBEID0gMC41JQorCSAqLworCisJb3V0MzIgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfQ0xLX1JFR19PRkZTRVQgKyBDR19QTEwxX0NUUkwwLAorCQkweDAwMmUwMDQ0KTsJLyogRCA9IDAuMjUlICovCisJb3V0MzIgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfQ0xLX1JFR19PRkZTRVQgKyBDR19QTEwxX0NUUkwxLAorCQkweDAwMDAwMDM5KTsJLyogQldBREogKi8KKworCS8qIEluaXRpYWxpemUgUExMMDogQ0dfUEJfQ0xLTyAgKi8KKwkvKiBEZXRlY3QgUEIgY2xvY2sgZnJlcS4gKi8KKwlpID0gaW4zMihDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X0NMS19SRUdfT0ZGU0VUICsgQ0dfUFdSVVBfU1RBVFVTKTsKKwlpID0gKGkgPj4gMTYpICYgMHgwNzsJLyogR2V0IFBCIFBMTCBtdWx0aXBsaWVyICovCisKKwlvdXQzMiAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArCisJCVRTSTEwOF9DTEtfUkVHX09GRlNFVCArIENHX1BMTDBfQ1RSTDAsIHBsbDBfY29uZmlnW2ldLmN0cmwwKTsKKwlvdXQzMiAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArCisJCVRTSTEwOF9DTEtfUkVHX09GRlNFVCArIENHX1BMTDBfQ1RSTDEsIHBsbDBfY29uZmlnW2ldLmN0cmwxKTsKKworCS8qIFdhaXQgYW5kIHNldCBTU0VOIGZvciBib3RoIFBMTDAgYW5kIDEgKi8KKwl1ZGVsYXkgKDEwMDApOworCW91dDMyIChDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X0NMS19SRUdfT0ZGU0VUICsgQ0dfUExMMV9DVFJMMCwKKwkJMHg4MDJlMDA0NCk7CS8qIEQ9MC4yNSUgKi8KKwlvdXQzMiAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArCisJCVRTSTEwOF9DTEtfUkVHX09GRlNFVCArIENHX1BMTDBfQ1RSTDAsCisJIAkweDgwMDAwMDAwIHwgcGxsMF9jb25maWdbaV0uY3RybDApOworI2VuZGlmCS8qIENGR19DTEtfU1BSRUFEICovCisKKyNpZmRlZiBDRkdfTDIKKwlsMmNhY2hlX2VuYWJsZSAoKTsKKyNlbmRpZgorCXByaW50ZiAoIkJVUzogICAlZCBNSHpcbiIsIGdkLT5idXNfY2xrIC8gMTAwMDAwMCk7CisJcHJpbnRmICgiTUVNOiAgICVkIE1IelxuIiwgZ2QtPm1lbV9jbGsgLyAxMDAwMDAwKTsKKworCS8qCisJICogQWxsIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gcHJpbnQgdGhlIGNhY2hlIGRldGFpbHMgaXMgYXZhaWJsYWJsZQorCSAqIGF0IHRoaXMgcG9pbnQgaS5lLiBhYm92ZSBjYWxsIHRvIGwyY2FjaGVfZW5hYmxlIGlzIHRoZSB2ZXJ5IGxhc3QKKwkgKiB0aGluZyBkb25lIHdpdGggcmVnYXJkcyB0byBlbmFibGluZyBkaWFibGluZyB0aGUgY2FjaGUuCisJICogU28gdGhpcyBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBwcmludCBhbGwgdGhpcyBpbmZvcm1hdGlvbgorCSAqLworCisJcHJpbnRmICgiQ0FDSEU6ICIpOworCXN3aXRjaCAoZ2V0X2NwdV90eXBlKCkpIHsKKwljYXNlIENQVV83NDQ3QToKKwkJcHJpbnRmICgiTDEgSW5zdHJ1Y3Rpb24gY2FjaGUgLSAzMktCIDgtd2F5Iik7CisJCShnZXRfaGlkMCAoKSAmICgxIDw8IDE1KSkgPyBwcmludGYgKCIgRU5BQkxFRFxuIikgOgorCQkJcHJpbnRmICgiIERJU0FCTEVEXG4iKTsKKwkJcHJpbnRmICgiTDEgRGF0YSBjYWNoZSAtIDMyS0IgOC13YXkiKTsKKwkJKGdldF9oaWQwICgpICYgKDEgPDwgMTQpKSA/IHByaW50ZiAoIiBFTkFCTEVEXG4iKSA6CisJCQlwcmludGYgKCIgRElTQUJMRURcbiIpOworCQlwcmludGYgKCJVbmlmaWVkIEwyIGNhY2hlIC0gNTEyS0IgOC13YXkiKTsKKwkJKGdldF9sMmNyICgpICYgKDEgPDwgMzEpKSA/IHByaW50ZiAoIiBFTkFCTEVEXG4iKSA6CisJCQlwcmludGYgKCIgRElTQUJMRURcbiIpOworCQlwcmludGYgKCJcbiIpOworCQlicmVhazsKKworCWNhc2UgQ1BVXzc0NDg6CisJCXByaW50ZiAoIkwxIEluc3RydWN0aW9uIGNhY2hlIC0gMzJLQiA4LXdheSIpOworCQkoZ2V0X2hpZDAgKCkgJiAoMSA8PCAxNSkpID8gcHJpbnRmICgiIEVOQUJMRURcbiIpIDoKKwkJCXByaW50ZiAoIiBESVNBQkxFRFxuIik7CisJCXByaW50ZiAoIkwxIERhdGEgY2FjaGUgLSAzMktCIDgtd2F5Iik7CisJCShnZXRfaGlkMCAoKSAmICgxIDw8IDE0KSkgPyBwcmludGYgKCIgRU5BQkxFRFxuIikgOgorCQkJcHJpbnRmICgiIERJU0FCTEVEXG4iKTsKKwkJcHJpbnRmICgiVW5pZmllZCBMMiBjYWNoZSAtIDFNQiA4LXdheSIpOworCQkoZ2V0X2wyY3IgKCkgJiAoMSA8PCAzMSkpID8gcHJpbnRmICgiIEVOQUJMRURcbiIpIDoKKwkJCXByaW50ZiAoIiBESVNBQkxFRFxuIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL21wYzc0NDhocGMyL3UtYm9vdC5sZHMgYi9ib2FyZC9tcGM3NDQ4aHBjMi91LWJvb3QubGRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMjQyMTMKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9tcGM3NDQ4aHBjMi91LWJvb3QubGRzCkBAIC0wLDAgKzEsMTM2IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAxCisgKiBKb3NoIEh1YmVyIDxodWJlckBtY2x4LmNvbT4sIE1pc3Npb24gQ3JpdGljYWwgTGludXgsIEluYy4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisvKgorICogdS1ib290LmxkcyAtIGxpbmtlciBzY3JpcHQgZm9yIFUtQm9vdCBvbiBtcGM3NDQ4aHBjMiBCb2FyZC4KKyAqLworCitPVVRQVVRfQVJDSChwb3dlcnBjKQorU0VBUkNIX0RJUigvbGliKTsgU0VBUkNIX0RJUigvdXNyL2xpYik7IFNFQVJDSF9ESVIoL3Vzci9sb2NhbC9saWIpOyBTRUFSQ0hfRElSKC91c3IvbG9jYWwvcG93ZXJwYy1hbnktZWxmL2xpYik7CisvKiBEbyB3ZSBuZWVkIGFueSBvZiB0aGVzZSBmb3IgZWxmPworICAgX19EWU5BTUlDID0gMDsgICAgKi8KK1NFQ1RJT05TCit7CisgIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLworICAuID0gKyBTSVpFT0ZfSEVBREVSUzsKKyAgLmludGVycCA6IHsgKiguaW50ZXJwKSB9CisgIC5oYXNoICAgICAgICAgIDogeyAqKC5oYXNoKQkJfQorICAuZHluc3ltICAgICAgICA6IHsgKiguZHluc3ltKQkJfQorICAuZHluc3RyICAgICAgICA6IHsgKiguZHluc3RyKQkJfQorICAucmVsLnRleHQgICAgICA6IHsgKigucmVsLnRleHQpCQl9CisgIC5yZWxhLnRleHQgICAgIDogeyAqKC5yZWxhLnRleHQpIAl9CisgIC5yZWwuZGF0YSAgICAgIDogeyAqKC5yZWwuZGF0YSkJCX0KKyAgLnJlbGEuZGF0YSAgICAgOiB7ICooLnJlbGEuZGF0YSkgCX0KKyAgLnJlbC5yb2RhdGEgICAgOiB7ICooLnJlbC5yb2RhdGEpIAl9CisgIC5yZWxhLnJvZGF0YSAgIDogeyAqKC5yZWxhLnJvZGF0YSkgCX0KKyAgLnJlbC5nb3QgICAgICAgOiB7ICooLnJlbC5nb3QpCQl9CisgIC5yZWxhLmdvdCAgICAgIDogeyAqKC5yZWxhLmdvdCkJCX0KKyAgLnJlbC5jdG9ycyAgICAgOiB7ICooLnJlbC5jdG9ycykJfQorICAucmVsYS5jdG9ycyAgICA6IHsgKigucmVsYS5jdG9ycykJfQorICAucmVsLmR0b3JzICAgICA6IHsgKigucmVsLmR0b3JzKQl9CisgIC5yZWxhLmR0b3JzICAgIDogeyAqKC5yZWxhLmR0b3JzKQl9CisgIC5yZWwuYnNzICAgICAgIDogeyAqKC5yZWwuYnNzKQkJfQorICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCQl9CisgIC5yZWwucGx0ICAgICAgIDogeyAqKC5yZWwucGx0KQkJfQorICAucmVsYS5wbHQgICAgICA6IHsgKigucmVsYS5wbHQpCQl9CisgIC5pbml0ICAgICAgICAgIDogeyAqKC5pbml0KQl9CisgIC5wbHQgOiB7ICooLnBsdCkgfQorICAudGV4dCAgICAgIDoKKyAgeworICAgIGNwdS83NHh4Xzd4eC9zdGFydC5vCSgudGV4dCkKKworLyogc3RvcmUgdGhlIGVudmlyb25tZW50IGluIGEgc2VwZXJhdGUgc2VjdG9yIGluIHRoZSBib290IGZsYXNoICovCisvKiAgICAuID0gZW52X29mZnNldDsgKi8KKy8qICAgIGNvbW1vbi9lbnZpcm9ubWVudC5vKC50ZXh0KSAqLworCisgICAgKigudGV4dCkKKyAgICAqKC5maXh1cCkKKyAgICAqKC5nb3QxKQorICB9CisgIF9ldGV4dCA9IC47CisgIFBST1ZJREUgKGV0ZXh0ID0gLik7CisgIC5yb2RhdGEgICAgOgorICB7CisgICAgKigucm9kYXRhKQorICAgICooLnJvZGF0YTEpCisgICAgKigucm9kYXRhLnN0cjEuNCkKKyAgfQorICAuZmluaSAgICAgIDogeyAqKC5maW5pKSAgICB9ID0wCisgIC5jdG9ycyAgICAgOiB7ICooLmN0b3JzKSAgIH0KKyAgLmR0b3JzICAgICA6IHsgKiguZHRvcnMpICAgfQorCisgIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLworICAuID0gKC4gKyAweDAwRkYpICYgMHhGRkZGRkYwMDsKKyAgX2Vyb3RleHQgPSAuOworICBQUk9WSURFIChlcm90ZXh0ID0gLik7CisgIC5yZWxvYyAgIDoKKyAgeworICAgICooLmdvdCkKKyAgICBfR09UMl9UQUJMRV8gPSAuOworICAgICooLmdvdDIpCisgICAgX0ZJWFVQX1RBQkxFXyA9IC47CisgICAgKiguZml4dXApCisgIH0KKyAgX19nb3QyX2VudHJpZXMgPSAoX0ZJWFVQX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4yOworICBfX2ZpeHVwX2VudHJpZXMgPSAoLiAtIF9GSVhVUF9UQUJMRV8pPj4yOworCisgIC5kYXRhICAgIDoKKyAgeworICAgICooLmRhdGEpCisgICAgKiguZGF0YTEpCisgICAgKiguc2RhdGEpCisgICAgKiguc2RhdGEyKQorICAgICooLmR5bmFtaWMpCisgICAgQ09OU1RSVUNUT1JTCisgIH0KKyAgX2VkYXRhICA9ICAuOworICBQUk9WSURFIChlZGF0YSA9IC4pOworCisgIC4gPSAuOworICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworICAuID0gLjsKKyAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKKyAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CisgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKKworICAuID0gQUxJR04oMjU2KTsKKyAgX19pbml0X2JlZ2luID0gLjsKKyAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9CisgIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQorICAuID0gQUxJR04oMjU2KTsKKyAgX19pbml0X2VuZCA9IC47CisKKyAgX19ic3Nfc3RhcnQgPSAuOworICAuYnNzICAgICAgIDoKKyAgeworICAgKiguc2JzcykgKiguc2NvbW1vbikKKyAgICooLmR5bmJzcykKKyAgICooLmJzcykKKyAgICooQ09NTU9OKQorICB9CisgIF9lbmQgPSAuIDsKKyAgUFJPVklERSAoZW5kID0gLik7Cit9CmRpZmYgLS1naXQgYS9jcHUvNzR4eF83eHgvY3B1LmMgYi9jcHUvNzR4eF83eHgvY3B1LmMKaW5kZXggZjRlNWZjNS4uOWM4OTk4YiAxMDA2NDQKLS0tIGEvY3B1Lzc0eHhfN3h4L2NwdS5jCisrKyBiL2NwdS83NHh4Xzd4eC9jcHUuYwpAQCAtNDQsNiArNDQsMTAgQEAKICNpbmNsdWRlIDw3NHh4Xzd4eC5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogCisjaWYgZGVmaW5lZChDT05GSUdfT0ZfRkxBVF9UUkVFKQorI2luY2x1ZGUgPGZ0X2J1aWxkLmg+CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19BTUlHQU9ORUczU0UKICNpbmNsdWRlICIuLi9ib2FyZC9NQUkvQW1pZ2FPbmVHM1NFL3ZpYTY4Ni5oIgogI2luY2x1ZGUgIi4uL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvbWVtaW8uaCIKQEAgLTEwMSw2ICsxMDUsMTAgQEAKIAkJdHlwZSA9IENQVV83NDU3OwogCQlicmVhazsKIAorCWNhc2UgMHg4MDAzOgorCQl0eXBlID0gQ1BVXzc0NDdBOworCQlicmVhazsKKwogCWNhc2UgMHg4MDA0OgogCQl0eXBlID0gQ1BVXzc0NDg7CiAJCWJyZWFrOwpAQCAtMTU2LDYgKzE2NCwxMCBAQAogCQlzdHIgPSAiTVBDNzQxMCI7CiAJCWJyZWFrOwogCisJY2FzZSBDUFVfNzQ0N0E6CisJCXN0ciA9ICJNUEM3NDQ3QSI7CisJCWJyZWFrOworCiAJY2FzZSBDUFVfNzQ0ODoKIAkJc3RyID0gIk1QQzc0NDgiOwogCQlicmVhazsKQEAgLTI2NCwyMCArMjc2LDE5IEBACiAvKgogICogRm9yIHRoZSA3NDAwIHRoZSBUQiBjbG9jayBydW5zIGF0IDEvNCB0aGUgY3B1IGJ1cyBzcGVlZC4KICAqLwotI2lmZGVmIENPTkZJR19BTUlHQU9ORUczU0UKKyNpZiBkZWZpbmVkKENPTkZJR19BTUlHQU9ORUczU0UpIHx8IGRlZmluZWQoQ0ZHX0NPTkZJR19CVVNfQ0xLKQogdW5zaWduZWQgbG9uZyBnZXRfdGJjbGsodm9pZCkKIHsKIAlyZXR1cm4gKGdkLT5idXNfY2xrIC8gNCk7CiB9Ci0jZWxzZQkvKiAhIENPTkZJR19BTUlHQU9ORUczU0UgKi8KKyNlbHNlCS8qICEgQ09ORklHX0FNSUdBT05FRzNTRSBhbmQgIUNGR19DT05GSUdfQlVTX0NMSyovCiAKIHVuc2lnbmVkIGxvbmcgZ2V0X3RiY2xrICh2b2lkKQogewogCXJldHVybiBDRkdfQlVTX0haIC8gNDsKIH0KLSNlbmRpZgkvKiBDT05GSUdfQU1JR0FPTkVHM1NFICovCisjZW5kaWYJLyogQ09ORklHX0FNSUdBT05FRzNTRSBvciBDRkdfQ09ORklHX0JVU19DTEsqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCiAjaWYgZGVmaW5lZChDT05GSUdfV0FUQ0hET0cpCiAjaWYgIWRlZmluZWQoQ09ORklHX1BDSVBQQzIpICYmICFkZWZpbmVkKENPTkZJR19CQUI3eHgpCiB2b2lkCkBAIC0yODksMyArMzAwLDMwIEBACiAjZW5kaWYJLyogQ09ORklHX1dBVENIRE9HICovCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmZGVmIENPTkZJR19PRl9GTEFUX1RSRUUKK3ZvaWQKK2Z0X2NwdV9zZXR1cCAodm9pZCAqYmxvYiwgYmRfdCAqYmQpCit7CisJdTMyICpwOworCXVsb25nIGNsb2NrOworCWludCBsZW47CisKKwljbG9jayA9IGJkLT5iaV9idXNmcmVxOworCisJcCA9IGZ0X2dldF9wcm9wIChibG9iLCAiL2NwdXMvIiBPRl9DUFUgIi9idXMtZnJlcXVlbmN5IiwgJmxlbik7CisJaWYgKHAgIT0gTlVMTCkKKwkJKnAgPSBjcHVfdG9fYmUzMiAoY2xvY2spOworCisjaWYgZGVmaW5lZChDT05GSUdfVFNJMTA4X0VUSCkKKwlwID0gZnRfZ2V0X3Byb3AgKGJsb2IsICIvIiBPRl9UU0kgIi9ldGhlcm5ldEA2MjAwL2FkZHJlc3MiLCAmbGVuKTsKKwkJbWVtY3B5IChwLCBiZC0+YmlfZW5ldGFkZHIsIDYpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19IQVNfRVRIMSkKKwlwID0gZnRfZ2V0X3Byb3AgKGJsb2IsICIvIiBPRl9UU0kgIi9ldGhlcm5ldEA2NjAwL2FkZHJlc3MiLCAmbGVuKTsKKwkJbWVtY3B5IChwLCBiZC0+YmlfZW5ldDFhZGRyLCA2KTsKKyNlbmRpZgorfQorI2VuZGlmCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9jcHUvNzR4eF83eHgvY3B1X2luaXQuYyBiL2NwdS83NHh4Xzd4eC9jcHVfaW5pdC5jCmluZGV4IGUwMmE0Y2MuLjFkZDFiMmMgMTAwNjQ0Ci0tLSBhL2NwdS83NHh4Xzd4eC9jcHVfaW5pdC5jCisrKyBiL2NwdS83NHh4Xzd4eC9jcHVfaW5pdC5jCkBAIC00Myw2ICs0Myw3IEBACiAJY2FzZSBDUFVfNzQ1MDoKIAljYXNlIENQVV83NDU1OgogCWNhc2UgQ1BVXzc0NTc6CisJY2FzZSBDUFVfNzQ0N0E6CiAJY2FzZSBDUFVfNzQ0ODoKIAkJLyogZW5hYmxlIHRoZSB0aW1lYmFzZSBiaXQgaW4gSElEMCAqLwogCQlzZXRfaGlkMChnZXRfaGlkMCgpIHwgMHg0MDAwMDAwKTsKZGlmZiAtLWdpdCBhL2NwdS83NHh4Xzd4eC9zcGVlZC5jIGIvY3B1Lzc0eHhfN3h4L3NwZWVkLmMKaW5kZXggZDE4MDBlZC4uZDhjNDBjZSAxMDA2NDQKLS0tIGEvY3B1Lzc0eHhfN3h4L3NwZWVkLmMKKysrIGIvY3B1Lzc0eHhfN3h4L3NwZWVkLmMKQEAgLTMxLDYgKzMxLDggQEAKIAogREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CiAKK2V4dGVybiB1bnNpZ25lZCBsb25nIGdldF9ib2FyZF9idXNfY2xrICh2b2lkKTsKKwogc3RhdGljIGNvbnN0IGludCBoaWQxX211bHRpcGxpZXJzX3hfMTBbXSA9IHsKIAkyNSwJLyogMDAwMCAtIDIuNXggKi8KIAk3NSwJLyogMDAwMSAtIDcuNXggKi8KQEAgLTUwLDYgKzUyLDQyIEBACiAJMAkvKiAxMTExIC0gb2ZmICovCiB9OwogCisvKiBQTExfQ0ZHWzA6NF0gdGFibGUgZm9yIGNwdSA3NDQ4Lzc0NDdBLzc0NTUvNzQ1NyAqLworc3RhdGljIGNvbnN0IGludCBoaWQxXzc0eHhfbXVsdGlwbGllcnNfeF8xMFtdID0geworCTExNSwJLyogMDAwMDAgLSAxMS41eCAgKi8KKwkxNzAsCS8qIDAwMDAxIC0gMTd4ICAgICovCisJNzUsCS8qIDAwMDEwIC0gIDcuNXggICovCisJMTUwLAkvKiAwMDAxMSAtIDE1eCAgICAqLworCTcwLAkvKiAwMDEwMCAtICA3eCAgICAqLworCTE4MCwJLyogMDAxMDEgLSAxOHggICAgKi8KKwkxMCwJLyogMDAxMTAgLSBieXBhc3MgKi8KKwkyMDAsCS8qIDAwMTExIC0gMjB4ICAgICovCisJMjAsCS8qIDAxMDAwIC0gIDJ4ICAgICovCisJMjEwLAkvKiAwMTAwMSAtIDIxeCAgICAqLworCTY1LAkvKiAwMTAxMCAtICA2LjV4ICAqLworCTEzMCwJLyogMDEwMTEgLSAxM3ggICAgKi8KKwk4NSwJLyogMDExMDAgLSAgOC41eCAgKi8KKwkyNDAsCS8qIDAxMTAxIC0gMjR4ICAgICovCisJOTUsCS8qIDAxMTEwIC0gIDkuNXggICovCisJOTAsCS8qIDAxMTExIC0gIDl4ICAgICovCisJMzAsCS8qIDEwMDAwIC0gIDN4ICAgICovCisJMTA1LAkvKiAxMDAwMSAtIDEwLjV4ICAqLworCTU1LAkvKiAxMDAxMCAtICA1LjV4ICAqLworCTExMCwJLyogMTAwMTEgLSAxMXggICAgKi8KKwk0MCwJLyogMTAxMDAgLSAgNHggICAgKi8KKwkxMDAsCS8qIDEwMTAxIC0gMTB4ICAgICovCisJNTAsCS8qIDEwMTEwIC0gIDV4ICAgICovCisJMTIwLAkvKiAxMDExMSAtIDEyeCAgICAqLworCTgwLAkvKiAxMTAwMCAtICA4eCAgICAqLworCTE0MCwJLyogMTEwMDEgLSAxNHggICAgKi8KKwk2MCwJLyogMTEwMTAgLSAgNnggICAgKi8KKwkxNjAsCS8qIDExMDExIC0gMTZ4ICAgICovCisJMTM1LAkvKiAxMTEwMCAtIDEzLjV4ICAqLworCTI4MCwJLyogMTExMDEgLSAyOHggICAgKi8KKwkwLAkvKiAxMTExMCAtIG9mZiAgICAqLworCTEyNQkvKiAxMTExMSAtIDEyLjV4ICAqLworfTsKKwogc3RhdGljIGNvbnN0IGludCBoaWQxX2Z4X211bHRpcGxpZXJzX3hfMTBbXSA9IHsKIAkwMCwJLyogMDAwMCAtIG9mZiAqLwogCTAwLAkvKiAwMDAxIC0gb2ZmICovCkBAIC04OSwyMiArMTI3LDMwIEBACiB7CiAJdWxvbmcgY2xvY2sgPSAwOwogCisjaWZkZWYgQ0ZHX0JVU19DTEsKKwlnZC0+YnVzX2NsayA9IENGR19CVVNfQ0xLOwkvKiBidXMgY2xvY2sgaXMgYSBmaXhlZCBmcmVxdWVuY3kgKi8KKyNlbHNlCisJZ2QtPmJ1c19jbGsgPSBnZXRfYm9hcmRfYnVzX2NsayAoKTsJLyogYnVzIGNsb2NrIGlzIGNvbmZpZ3VyYWJsZSAqLworI2VuZGlmCisKIAkvKiBjYWxjdWxhdGUgdGhlIGNsb2NrIGZyZXF1ZW5jeSBiYXNlZCB1cG9uIHRoZSBDUFUgdHlwZSAqLwogCXN3aXRjaCAoZ2V0X2NwdV90eXBlKCkpIHsKKwljYXNlIENQVV83NDQ3QToKIAljYXNlIENQVV83NDQ4OgogCWNhc2UgQ1BVXzc0NTU6CiAJY2FzZSBDUFVfNzQ1NzoKIAkJLyoKLQkJICogSXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBQTExfRVhUIGxpbmUgaXMgemVyby4KIAkJICogTWFrZSBzdXJlIGRpdmlzaW9uIGlzIGRvbmUgYmVmb3JlIG11bHRpcGxpY2F0aW9uIHRvIHByZXZlbnQgMzItYml0CiAJCSAqIGFyaXRobWV0aWMgb3ZlcmZsb3dzIHdoaWNoIHdpbGwgY2F1c2UgYSBuZWdhdGl2ZSBudW1iZXIKIAkJICovCi0JCWNsb2NrID0gKENGR19CVVNfQ0xLIC8gMTApICogaGlkMV9tdWx0aXBsaWVyc194XzEwWyhnZXRfaGlkMSAoKSA+PiAxMykgJiAweEZdOworCQljbG9jayA9IChnZC0+YnVzX2NsayAvIDEwKSAqCisJCQloaWQxXzc0eHhfbXVsdGlwbGllcnNfeF8xMFsoZ2V0X2hpZDEgKCkgPj4gMTIpICYgMHgxRl07CiAJCWJyZWFrOwogCiAJY2FzZSBDUFVfNzUwR1g6CiAJY2FzZSBDUFVfNzUwRlg6Ci0JCWNsb2NrID0gQ0ZHX0JVU19DTEsgKiBoaWQxX2Z4X211bHRpcGxpZXJzX3hfMTBbZ2V0X2hpZDEgKCkgPj4gMjddIC8gMTA7CisJCWNsb2NrID0gZ2QtPmJ1c19jbGsgKgorCQkJaGlkMV9meF9tdWx0aXBsaWVyc194XzEwW2dldF9oaWQxICgpID4+IDI3XSAvIDEwOwogCQlicmVhazsKIAogCWNhc2UgQ1BVXzc0NTA6CkBAIC0xMjEsNyArMTY3LDggQEAKIAkJICogTWFrZSBzdXJlIGRpdmlzaW9uIGlzIGRvbmUgYmVmb3JlIG11bHRpcGxpY2F0aW9uIHRvIHByZXZlbnQgMzItYml0CiAJCSAqIGFyaXRobWV0aWMgb3ZlcmZsb3dzIHdoaWNoIHdpbGwgY2F1c2UgYSBuZWdhdGl2ZSBudW1iZXIKIAkJICovCi0JCWNsb2NrID0gKENGR19CVVNfQ0xLIC8gMTApICogaGlkMV9tdWx0aXBsaWVyc194XzEwW2dldF9oaWQxICgpID4+IDI4XTsKKwkJY2xvY2sgPSAoZ2QtPmJ1c19jbGsgLyAxMCkgKgorCQkJaGlkMV9tdWx0aXBsaWVyc194XzEwW2dldF9oaWQxICgpID4+IDI4XTsKIAkJYnJlYWs7CiAKIAljYXNlIENQVV9VTktOT1dOOgpAQCAtMTMxLDcgKzE3OCw2IEBACiAJfQogCiAJZ2QtPmNwdV9jbGsgPSBjbG9jazsKLQlnZC0+YnVzX2NsayA9IENGR19CVVNfQ0xLOwogCiAJcmV0dXJuICgwKTsKIH0KZGlmZiAtLWdpdCBhL2NwdS9wcGM0eHgvNDR4X3NwZF9kZHIyLmMgYi9jcHUvcHBjNHh4LzQ0eF9zcGRfZGRyMi5jCmluZGV4IDNhYjA1MGYuLmRhNTA5ODUgMTAwNjQ0Ci0tLSBhL2NwdS9wcGM0eHgvNDR4X3NwZF9kZHIyLmMKKysrIGIvY3B1L3BwYzR4eC80NHhfc3BkX2RkcjIuYwpAQCAtMTExMCw3ICsxMTEwLDcgQEAKIAkJCQltb2R0MyA9IDB4MDAwMDAwMDA7CiAJCQl9CiAJCX0KLSAgCX0gZWxzZSB7CisJfSBlbHNlIHsKIAkJY29kdCB8PSBTRFJBTV9DT0RUX0RRU18yXzVfVl9ERFIxOwogCQltb2R0MCA9IDB4MDAwMDAwMDA7CiAJCW1vZHQxID0gMHgwMDAwMDAwMDsKZGlmZiAtLWdpdCBhL2NwdS9wcGM0eHgvc3RhcnQuUyBiL2NwdS9wcGM0eHgvc3RhcnQuUwppbmRleCA2YjJjMTcwLi4zZmE1MmJkIDEwMDY0NAotLS0gYS9jcHUvcHBjNHh4L3N0YXJ0LlMKKysrIGIvY3B1L3BwYzR4eC9zdGFydC5TCkBAIC0xODU4LDExICsxODU4LDExIEBACiAjZW5kaWYgLyogQ09ORklHXzQwNUVQICovCiAKICNpZiBkZWZpbmVkKENPTkZJR180NDApCi0jZGVmaW5lIGZ1bmN0aW9uX3Byb2xvZyhmdW5jX25hbWUpICAgICAgLnRleHQ7IFwKKyNkZWZpbmUgZnVuY3Rpb25fcHJvbG9nKGZ1bmNfbmFtZSkJLnRleHQ7IFwKIAkJCQkJLmFsaWduIDI7IFwKIAkJCQkJLmdsb2JsIGZ1bmNfbmFtZTsgXAogCQkJCQlmdW5jX25hbWU6Ci0jZGVmaW5lIGZ1bmN0aW9uX2VwaWxvZyhmdW5jX25hbWUpICAgICAgLnR5cGUgZnVuY19uYW1lLEBmdW5jdGlvbjsgXAorI2RlZmluZSBmdW5jdGlvbl9lcGlsb2coZnVuY19uYW1lKQkudHlwZSBmdW5jX25hbWUsQGZ1bmN0aW9uOyBcCiAJCQkJCS5zaXplIGZ1bmNfbmFtZSwuLWZ1bmNfbmFtZQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCkBAIC0xOTE4LDEzICsxOTE4LDEzIEBACiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAJZnVuY3Rpb25fcHJvbG9nKGRjYnpfYXJlYSkKIAlybHdpbm0uIHI1LHI0LDAsMjcsMzEKLQlybHdpbm0gIHI1LHI0LDI3LDUsMzEKLQliZXEgICAgIC4uZF9yYTIKLQlhZGRpICAgIHI1LHI1LDB4MDAwMQotLi5kX3JhMjptdGN0ciAgIHI1Ci0uLmRfYWcyOmRjYnogICAgcjAscjMKLQlhZGRpICAgIHIzLHIzLDMyCi0JYmRueiAgICAuLmRfYWcyCisJcmx3aW5tCXI1LHI0LDI3LDUsMzEKKwliZXEJLi5kX3JhMgorCWFkZGkJcjUscjUsMHgwMDAxCisuLmRfcmEyOm10Y3RyCXI1CisuLmRfYWcyOmRjYnoJcjAscjMKKwlhZGRpCXIzLHIzLDMyCisJYmRuegkuLmRfYWcyCiAJc3luYwogCWJscgogCWZ1bmN0aW9uX2VwaWxvZyhkY2J6X2FyZWEpCkBAIC0xOTMzLDI2ICsxOTMzLDI2IEBACiB8IGRmbHVzaC4gIEFzc3VtZSAzMksgYXQgdmVjdG9yIGFkZHJlc3MgaXMgY2FjaGFibGUuCiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAJZnVuY3Rpb25fcHJvbG9nKGRmbHVzaCkKLQltZm1zciAgIHI5Ci0Jcmx3aW5tICByOCxyOSwwLDE1LDEzCi0Jcmx3aW5tICByOCxyOCwwLDE3LDE1Ci0JbXRtc3IgICByOAotCWFkZGkgICAgcjMscjAsMHgwMDAwCi0JbXRzcHIgICBkdmxpbSxyMwotCW1mc3ByICAgcjMsaXZwcgotCWFkZGkgICAgcjQscjAsMTAyNAotCW10Y3RyICAgcjQKKwltZm1zcglyOQorCXJsd2lubQlyOCxyOSwwLDE1LDEzCisJcmx3aW5tCXI4LHI4LDAsMTcsMTUKKwltdG1zcglyOAorCWFkZGkJcjMscjAsMHgwMDAwCisJbXRzcHIJZHZsaW0scjMKKwltZnNwcglyMyxpdnByCisJYWRkaQlyNCxyMCwxMDI0CisJbXRjdHIJcjQKIC4uZGZsdXNoX2xvb3A6Ci0JbHd6ICAgICByNiwweDAocjMpCi0JYWRkaSAgICByMyxyMywzMgotCWJkbnogICAgLi5kZmx1c2hfbG9vcAotCWFkZGkgICAgcjMscjMsLTMyCi0JbXRjdHIgICByNAotLi5hZzogICBkY2JmICAgIHIwLHIzCi0JYWRkaSAgICByMyxyMywtMzIKLQliZG56ICAgIC4uYWcKKwlsd3oJcjYsMHgwKHIzKQorCWFkZGkJcjMscjMsMzIKKwliZG56CS4uZGZsdXNoX2xvb3AKKwlhZGRpCXIzLHIzLC0zMgorCW10Y3RyCXI0CisuLmFnOglkY2JmCXIwLHIzCisJYWRkaQlyMyxyMywtMzIKKwliZG56CS4uYWcKIAlzeW5jCi0JbXRtc3IgICByOQorCW10bXNyCXI5CiAJYmxyCiAJZnVuY3Rpb25fZXBpbG9nKGRmbHVzaCkKICNlbmRpZiAvKiBDT05GSUdfNDQwICovCmRpZmYgLS1naXQgYS9kb2MvUkVBRE1FLm1wYzc0NDhocGMyIGIvZG9jL1JFQURNRS5tcGM3NDQ4aHBjMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjU5ZTgzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL1JFQURNRS5tcGM3NDQ4aHBjMgpAQCAtMCwwICsxLDE4NCBAQAorRnJlZXNjYWxlIE1QQzc0NDhocGMyIChUYWlnYSkgYm9hcmQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NyZWF0ZWQgMDgvMTEvMjAwNiBSb3kgWmFuZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK01QQzc0NDhocGMyIChUYWlnYSkgYm9hcmQgaXMgYSBoaWdoLXBlcmZvcm1hbmNlIFBvd2VyUEMgc2VydmVyIHJlZmVyZW5jZQorZGVzaWduLCB3aGljaCBpcyBvcHRpbWl6ZWQgZm9yIGhpZ2ggc3BlZWQgdGhyb3VnaHB1dCBiZXR3ZWVuIHRoZSBwcm9jZXNzb3IgYW5kCit0aGUgbWVtb3J5LCBkaXNrIGRyaXZlIGFuZCBFdGhlcm5ldCBwb3J0IHN1YnN5c3RlbXMuCisKK01QQzc0NDhocGMyKFRhaWdhKSBpcyBkZXNpZ25lZCB0byB0aGUgbWljcm8tQVRYIGNoYXNzaXMsIGFsbG93aW5nIGl0IHRvIGJlCit1c2VkIGluIDFVIG9yIDJVIHJhY2stbW91bnQgY2hhc3Npc6GvLCBhcyB3ZWxsIGFzIGluIHN0YW5kYXJkIEFUWC9NaWNyby1BVFgKK2NoYXNzaXMuCisKK0J1aWxkaW5nIFUtQm9vdAorLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgbXBjNzQ0OGhwYzIgY29kZSBiYXNlIGlzIGtub3duIHRvIGNvbXBpbGUgdXNpbmc6CisJQmludXRpbHMgMi4xNSwgR2NjIDMuNC4zLCBHbGliYyAyLjMuMworCisJJCBtYWtlIG1wYzc0NDhocGMyX2NvbmZpZworCUNvbmZpZ3VyaW5nIGZvciBtcGM3NDQ4aHBjMiBib2FyZC4uLgorCisJJCBtYWtlCisKK01lbW9yeSBNYXAKKy0tLS0tLS0tLS0KKworVGhlIG1lbW9yeSBtYXAgaXMgc2V0dXAgZm9yIExpbnV4IHRvIG9wZXJhdGUgcHJvcGVybHkuCisKK1RoZSBtYXBwaW5nIGlzOgorCisJUmFuZ2UgU3RhcnQJUmFuZ2UgRW5kCURlZmluaXRpb24JCQlTaXplCisKKwkweDAwMDBfMDAwMAkweDdmZmZfZmZmZglERFIJCQkJMkcKKwkweGUwMDBfMDAwMAkweGU3ZmZfZmZmZglQQ0kgTWVtb3J5CQkJMTI4TQorCTB4ZmEwMF8wMDAwCTB4ZmFmZl9mZmZmCVBDSSBJTwkJCQkxNk0KKwkweGZiMDBfMDAwMAkweGZiZmZfZmZmZglQQ0kgQ29uZmlnCQkJMTZNCisJMHhmYzAwXzAwMDAJMHhmYzBmX2ZmZmYJTlZSQU0vQ0FETVVTCQkJMU0KKwkweGZlMDBfMDAwMAkweGZlZmZfZmZmZglQcm9tSmV0CQkJCTE2TQorCTB4ZmYwMF8wMDAwCTB4ZmY4MF8wMDAwCUZMQVNIIChib290IGZsYXNoKQkJOE0KKwkweGZmODBfMDAwMAkweGZmZmZfZmZmZglGTEFTSCAoc2Vjb25kIGhhbGYgZmxhc2gpCThNCisKK1VzaW5nIEZsYXNoCistLS0tLS0tLS0tLQorCitUaGUgTVBDNzQ0OGhwYzIgYm9hcmQgaGFzIHR3byAiYmFua3MiIG9mIGZsYXNoLCBlYWNoIDhNQiBpbiBzaXplCisoMl4yMyA9IDB4MDA4MDAwMDApLgorCitOb3RlOiB0aGUgImJhbmsiIGhlcmUgcmVmZXJzIHRvIGhhbGYgb2YgdGhlIGZsYXNoLiBJbiBmYWN0LCB0aGVyZSBpcyBvbmx5IG9uZQorYmFuayBvZiBmbGFzaCwgd2hpY2ggaXMgZGl2aWRlZCBpbnRvIGxvdyBhbmQgaGlnaCBoYWxmLiBFYWNoIGlzIGNvbnRyb2xsZWQgYnkKK3RoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBvZiB0aGUgYWRkcmVzcyBidXMuIFRoZSBzbyBjYWxsZWQgImJhbmsiIGlzIG9ubHkgZm9yCitjb252ZW5pZW5jZS4KKworVGhlcmUgaXMgYSBzd2l0Y2ggd2hpY2ggYWxsb3dzIHRoZSAiYmFuayIgdG8gYmUgc2VsZWN0ZWQuICBUaGUgc3dpdGNoCitzZXR0aW5ncyBmb3IgdXBkYXRpbmcgZmxhc2ggYXJlIGdpdmVuIGJlbG93LgorCitUaGUgdS1ib290IGNvbW1hbmRzIGZvciBjb3B5aW5nIHRoZSBib290LWJhbmsgaW50byB0aGUgc2Vjb25kYXJ5IGJhbmsgYXJlCithcyBmb2xsb3dzOgorCisJZXJhc2UgZmY4MDAwMDAgZmY4ODAwMDAKKwljcC5iIGZmMDAwMDAwIGZmODAwMDAwIDgwMDAwCisKK1UtYm9vdCBjb21tYW5kcyBmb3IgZG93bmxvYWRpbmcgYW4gaW1hZ2UgdmlhIHRmdHAgYW5kIGZsYXNoaW5nCitpdCBpbnRvIHRoZSBzZWNvbmRhcnkgYmFuazoKKworCXRmdHAgMTAwMDAgPHUtYm9vdC5iaW4uaW1hZ2U+CisJZXJhc2UgZmYwMDAwMDAgZmYwODAwMDAKKwljcC5iIDEwMDAwIGZmMDAwMDAwIDgwMDAwCisKK0FmdGVyIGNvcHlpbmcgdGhlIGltYWdlIGludG8gdGhlIHNlY29uZCBiYW5rIG9mIGZsYXNoLCBiZSBzdXJlIHRvIHRvZ2dsZQorU1czWzRdIG9uIGJvYXJkIGJlZm9yZSByZXNldHRpbmcgdGhlIGJvYXJkIGluIG9yZGVyIHRvIHNldCB0aGUKK3NlY29uZGFyeSBiYW5rIGFzIHRoZSBib290LWJhbmsuCisKK0JvYXJkIFN3aXRjaGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK01vc3Qgc3dpdGNoZXMgb24gdGhlIGJvYXJkIHNob3VsZCBub3QgYmUgY2hhbmdlZC4gIFRoZSBtb3N0IGZyZXF1ZW50Cit1c2VyLXNldHRhYmxlIHN3aXRjaGVzIG9uIHRoZSBib2FyZCBhcmUgdXNlZCB0byBjb25maWd1cmUKK3RoZSBmbGFzaCBiYW5rcyBhbmQgZGV0ZXJtaW5pbmcgdGhlIFBDSSBmcmVxdWVuY3kuCisKK1NXMVsxLTVdOiBQcm9jZXNzb3IgY29yZSB2b2x0YWdlCisKKwkxMjM0NQkJQ29yZSBWb2x0YWdlCisJLS0tLS0KKwlTVzE9MDExMTEJMS4wMDBWLgorCVNXMT0wMTEwMQkxLjEwMFYuCisJU1cxPTAxMDExCTEuMjAwVi4KKwlTVzE9MDEwMDEJMS4zMDBWIG9ubHkgZm9yIE1QQzc0NDdBLgorCisKK1NXMlsxLTZdOiBDUFUgY29yZSBmcmVxdWVuY3kKKworCQlDUFUgQ29yZSBGcmVxdWVuY3kgKE1IeikKKwkJCUJ1cyBGcmVxdWVuY3kKKwkxMjM0NTYJCTEwMAkxMzMJMTY3CTIwMAlSYXRpbworCisJLS0tLS0tCisJU1cyPTEwMTEwMAk1MDAJNjY3CTgzMwkxMDAwCTV4CisJU1cyPTEwMDEwMAk1NTAJNzMzCTkxNwkxMTAwCTUuNXgKKwlTVzI9MTEwMTAwCTYwMAk4MDAJMTAwMAkxMjAwCTZ4CisJU1cyPTAxMDEwMAk2NTAJODY2CTEwODMJMTMwMAk2LjV4CisJU1cyPTAwMTAwMAk3MDAJOTMwCTExNjcJMTQwMAk3eAorCVNXMj0wMDAxMDAJNzUwCTEwMDAJMTI1MAkxNTAwCTcuNXgKKwlTVzI9MTEwMDAwCTgwMAkxMDY2CTEzMzMJMTYwMAk4eAorCVNXMj0wMTEwMDAJODUwCTEzMzMJMTQxNwkxNzAwCTguNXggb25seSBmb3IgTVBDNzQ0N0EKKwlTVzI9MDExMTEwCTkwMAkxMjAwCTE1MDAJMTgwMAk5eAorCitUaGlzIHRhYmxlIHNob3dzIG9ubHkgYSBzdWJzZXQgb2YgYXZhaWxhYmxlIGZyZXF1ZW5jeSBvcHRpb25zOyBzZWUgdGhlIENQVQoraGFyZHdhcmUgc3BlY2lmaWNhdGlvbnMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK1NXMls3LThdOiBCdXMgUHJvdG9jb2wgYW5kIENQVSBSZXNldCBPcHRpb24KKworCTcKKwktCisJU1cyPTAJCVN5c3RlbSBidXMgdXNlcyBNUFggYnVzIHByb3RvY29sCisJU1cyPTEJCVN5c3RlbSBidXMgdXNlcyA2MHggYnVzIHByb3RvY29sCisKKwk4CisJLQorCVNXMj0wCQlUU0kxMDggY2FuIGNhdXNlIENQVSByZXNldAorCVNXMj0xCQlUU0kxMDggY2FuIG5vdCBjYXVzZSBDUFUgcmVzZXQKKworU1czWzEtOF0gc3lzdGVtIG9wdGlvbnMKKworCTEyMworCS0tLQorCVNXMz14eHgJCUNvbm5lY3RlZCB0byBHUElPWzA6Ml0gb24gVFNJMTA4CisKKwk0CisJLQorCVNXMz0wCQlDUFUgYm9vdHMgZnJvbSBsb3cgaGFsZiBvZiBmbGFzaAorCVNXMz0xCQlDUFUgYm9vdHMgZnJvbSBoaWdoIGhhbGYgb2YgZmxhc2gKKworCTUKKwktCisJU1czPTAJCVNBVEEgYW5kIHNsb3QyIGNvbm5lY3RlZCB0byBQQ0kgYnVzCisJU1czPTEJCU9ubHkgc2xvdDEgY29ubmVjdGVkIHRvIFBDSSBidXMKKworCTYKKwktCisJU1czPTAJCVVTQiBjb25uZWN0ZWQgdG8gUENJIGJ1cworCVNXMz0xCQlVU0IgZGlzY29ubmVjdGVkIGZyb20gUENJIGJ1cworCisJNworCS0KKwlTVzM9MAkJRmxhc2ggaXMgd3JpdGUgcHJvdGVjdGVkCisJU1czPTEJCUZsYXNoIGlzIE5PVCB3cml0ZSBwcm90ZWN0ZWQKKworCTgKKwktCisJU1czPTAJCUNQVSB3aWxsIGJvb3QgZnJvbSBmbGFzaAorCVNXMz0xCQlDUFUgd2lsbCBib290IGZyb20gUHJvbUpldAorCitTVzRbMS0zXTogU3lzdGVtIGJ1cyBmcmVxdWVuY3kKKworCQkJQnVzIEZyZXF1ZW5jeSAoTUh6KQorCS0tLQorCVNXND0wMTAJCQkxODMKKwlTVzQ9MDExCQkJMTAwCisJU1c0PTEwMAkJCTEzMworCVNXND0xMDEJCQkxNjYgb25seSBmb3IgTVBDNzQ0N0EKKwlTVzQ9MTEwCQkJMjAwIG9ubHkgZm9yIE1QQzc0NDgKKwlvdGhlcnMJCQlyZXNlcnZlZAorCitTVzRbNC02XTogRERSMiBTRFJBTSBmcmVxdWVuY3kKKworCQkJQnVzIEZyZXF1ZW5jeSAoTUh6KQorCS0tLQorCVNXND0wMDAJCWV4dGVybmFsIGNsb2NrCisJU1c0PTAxMQkJc3lzdGVtIGNsb2NrCisJU1c0PTEwMAkJMTMzCisJU1c0PTEwMQkJMTY2CisJU1c0PTExMAkJMjAwCisJb3RoZXJzCQlyZXNlcnZlZAorCitTVzRbNy04XTogUENJL1BDSS1YIGZyZXF1ZW5jeSBjb250cm9sCisJNworCS0KKwlTVzQ9MAkJUENJL1BDSS1YIGJ1cyBvcGVyYXRlcyBub3JtYWxseQorCVNXND0xCQlQQ0kgYnVzIGZvcmNlZCB0byBQQ0ktMzMgbW9kZQorCisJOAorCS0KKwlTVzQ9MAkJUENJLVggbW9kZSBhdCAxMzMgTUh6IGFsbG93ZWQKKwlTVzQ9MQkJUENJLVggbW9kZSBsaW1pdGVkIHRvIDEwMCBNSHoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvTWFrZWZpbGUgYi9kcml2ZXJzL01ha2VmaWxlCmluZGV4IGZmZmMyMmEuLjYwY2UzYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9NYWtlZmlsZQpAQCAtMzUsOCArMzUsOCBAQAogCSAgbGFuOTFjOTYubyBcCiAJICBuYXRzZW1pLm8gbmUyMDAwLm8gbmV0YXJtX2V0aC5vIG5ldGNvbnNvbGUubyBcCiAJICBuczE2NTUwLm8gbnM4MzgyeC5vIG5zODczMDgubyBuczc1MjBfZXRoLm8gb21hcDE1MTBfaTJjLm8gXAotCSAgb21hcDI0eHhfaTJjLm8gcGNpLm8gcGNpX2F1dG8ubyBwY2lfaW5kaXJlY3QubyBcCi0JICBwY25ldC5vIHBsYjI4MDBfZXRoLm8gXAorCSAgb21hcDI0eHhfaTJjLm8gcGNpLm8gcGNpX2F1dG8ubyBwY2lfaW5kaXJlY3QubyB0c2kxMDhfcGNpLm9cCisJICB0c2kxMDhfaTJjLm8gcGNuZXQubyBwbGIyODAwX2V0aC5vIFwKIAkgIHBzMnNlci5vIHBzMm11bHQubyBwY19rZXliLm8gXAogCSAgcnRsODAxOS5vIHJ0bDgxMzkubyBydGw4MTY5Lm8gXAogCSAgczNjNDUxMGJfZXRoLm8gczNjNDUxMGJfdWFydC5vIFwKQEAgLTQ1LDcgKzQ1LDcgQEAKIAkgIHNlcmlhbF9wbDAxMC5vIHNlcmlhbF9wbDAxMS5vIHNlcmlhbF94dWFydGxpdGUubyBcCiAJICBzbDgxMV91c2IubyBzbTUwMS5vIHNtYzkxMTExLm8gc21pTHlueEVNLm8gXAogCSAgc3RhdHVzX2xlZC5vIHN5bTUzYzh4eC5vIHN5c3RlbWFjZS5vIGFoY2kubyBcCi0JICB0aV9wY2kxNDEwYS5vIHRpZ29uMy5vIHRzZWMubyBcCisJICB0aV9wY2kxNDEwYS5vIHRpZ29uMy5vIHRzZWMubyB0c2kxMDhfZXRoLm9cCiAJICB1c2JkY29yZS5vIHVzYmRjb3JlX2VwMC5vIHVzYmRjb3JlX29tYXAxNTEwLm8gdXNidHR5Lm8gXAogCSAgdmlkZW9tb2Rlcy5vIHc4M2M1NTNmLm8gXAogCSAga3M4Njk1ZXRoLm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy90c2kxMDhfZXRoLmMgYi9kcml2ZXJzL3RzaTEwOF9ldGguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzM0MWJlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy90c2kxMDhfZXRoLmMKQEAgLTAsMCArMSwxMDM2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgRXRoZXJuZXQgaW50ZXJmYWNlIGZvciBUdW5kcmEgVFNJMTA4IGJyaWRnZSBjaGlwCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9ORVQpICYmIGRlZmluZWQoQ09ORklHX05FVF9NVUxUSSkgXAorCSYmIGRlZmluZWQoQ09ORklHX1RTSTEwOF9FVEgpCisKKyNpZiAhZGVmaW5lZChDT05GSUdfVFNJMTA4X0VUSF9OVU1fUE9SVFMpIHx8IChDT05GSUdfVFNJMTA4X0VUSF9OVU1fUE9SVFMgPiAyKQorI2Vycm9yICJDT05GSUdfVFNJMTA4X0VUSF9OVU1fUE9SVFMgbXVzdCBiZSBkZWZpbmVkIGFzIDEgb3IgMiIKKyNlbmRpZgorCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8bWFsbG9jLmg+CisjaW5jbHVkZSA8bmV0Lmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CisKKyNpZmRlZiBERUJVRworI2RlZmluZSBUU0kxMDhfRVRIX0RFQlVHIDcKKyNlbHNlCisjZGVmaW5lIFRTSTEwOF9FVEhfREVCVUcgMAorI2VuZGlmCisKKyNpZiBUU0kxMDhfRVRIX0RFQlVHID4gMAorI2RlZmluZSBkZWJ1Z19sZXYobGV2LCBmbXQsIGFyZ3MuLi4pIFwKK2lmIChsZXYgPD0gVFNJMTA4X0VUSF9ERUJVRykgXAorcHJpbnRmICgiJXMgJWQ6ICIgZm10LCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCAjI2FyZ3MpCisjZWxzZQorI2RlZmluZSBkZWJ1Z19sZXYobGV2LCBmbXQsIGFyZ3MuLi4pIGRve313aGlsZSgwKQorI2VuZGlmCisKKyNkZWZpbmUgUlhfUFJJTlRfRVJST1JTCisjZGVmaW5lIFRYX1BSSU5UX0VSUk9SUworCisjZGVmaW5lIEVUSF9CQVNFCShDRkdfVFNJMTA4X0NTUl9CQVNFICsgMHg2MDAwKQorCisjZGVmaW5lIEVUSF9QT1JUX09GRlNFVAkweDQwMAorCisjZGVmaW5lIF9fUkVHMzIoYmFzZSwgb2Zmc2V0KSAoKigodm9sYXRpbGUgdTMyICopKChjaGFyICopKGJhc2UpICsgKG9mZnNldCkpKSkKKworI2RlZmluZSByZWdfTUFDX0NPTkZJR18xKGJhc2UpCQlfX1JFRzMyKGJhc2UsIDB4MDAwMDAwMDApCisjZGVmaW5lIE1BQ19DT05GSUdfMV9UWF9FTkFCTEUJCSgweDAwMDAwMDAxKQorI2RlZmluZSBNQUNfQ09ORklHXzFfU1lOQ19UWF9FTkFCTEUJKDB4MDAwMDAwMDIpCisjZGVmaW5lIE1BQ19DT05GSUdfMV9SWF9FTkFCTEUJCSgweDAwMDAwMDA0KQorI2RlZmluZSBNQUNfQ09ORklHXzFfU1lOQ19SWF9FTkFCTEUJKDB4MDAwMDAwMDgpCisjZGVmaW5lIE1BQ19DT05GSUdfMV9UWF9GTE9XX0NPTlRST0wJKDB4MDAwMDAwMTApCisjZGVmaW5lIE1BQ19DT05GSUdfMV9SWF9GTE9XX0NPTlRST0wJKDB4MDAwMDAwMjApCisjZGVmaW5lIE1BQ19DT05GSUdfMV9MT09QX0JBQ0sJCSgweDAwMDAwMTAwKQorI2RlZmluZSBNQUNfQ09ORklHXzFfUkVTRVRfVFhfRlVOQ1RJT04JKDB4MDAwMTAwMDApCisjZGVmaW5lIE1BQ19DT05GSUdfMV9SRVNFVF9SWF9GVU5DVElPTgkoMHgwMDAyMDAwMCkKKyNkZWZpbmUgTUFDX0NPTkZJR18xX1JFU0VUX1RYX01BQwkoMHgwMDA0MDAwMCkKKyNkZWZpbmUgTUFDX0NPTkZJR18xX1JFU0VUX1JYX01BQwkoMHgwMDA4MDAwMCkKKyNkZWZpbmUgTUFDX0NPTkZJR18xX1NJTV9SRVNFVAkJKDB4NDAwMDAwMDApCisjZGVmaW5lIE1BQ19DT05GSUdfMV9TT0ZUX1JFU0VUCQkoMHg4MDAwMDAwMCkKKworI2RlZmluZSByZWdfTUFDX0NPTkZJR18yKGJhc2UpCQlfX1JFRzMyKGJhc2UsIDB4MDAwMDAwMDQpCisjZGVmaW5lIE1BQ19DT05GSUdfMl9GVUxMX0RVUExFWAkoMHgwMDAwMDAwMSkKKyNkZWZpbmUgTUFDX0NPTkZJR18yX0NSQ19FTkFCTEUJCSgweDAwMDAwMDAyKQorI2RlZmluZSBNQUNfQ09ORklHXzJfUEFEX0NSQwkJKDB4MDAwMDAwMDQpCisjZGVmaW5lIE1BQ19DT05GSUdfMl9MRU5HVEhfQ0hFQ0sJKDB4MDAwMDAwMTApCisjZGVmaW5lIE1BQ19DT05GSUdfMl9IVUdFX0ZSQU1FCQkoMHgwMDAwMDAyMCkKKyNkZWZpbmUgTUFDX0NPTkZJR18yX0lOVEVSRkFDRV9NT0RFKHZhbCkJKCgodmFsKSAmIDB4MykgPDwgOCkKKyNkZWZpbmUgTUFDX0NPTkZJR18yX1BSRUFNQkxFX0xFTkdUSCh2YWwpCSgoKHZhbCkgJiAweGYpIDw8IDEyKQorI2RlZmluZSBJTlRFUkZBQ0VfTU9ERV9OSUJCTEUJCTEJLyogMTAvMTAwIE1iL3MgTUlJKSAqLworI2RlZmluZSBJTlRFUkZBQ0VfTU9ERV9CWVRFCQkyCS8qIDEwMDAgTWIvcyBHTUlJL1RCSSAqLworCisjZGVmaW5lIHJlZ19NQVhJTVVNX0ZSQU1FX0xFTkdUSChiYXNlKQkJX19SRUczMihiYXNlLCAweDAwMDAwMDEwKQorCisjZGVmaW5lIHJlZ19NSUlfTUdNVF9DT05GSUcoYmFzZSkJCV9fUkVHMzIoYmFzZSwgMHgwMDAwMDAyMCkKKyNkZWZpbmUgTUlJX01HTVRfQ09ORklHX01HTVRfQ0xPQ0tfU0VMRUNUKHZhbCkJKCh2YWwpICYgMHg3KQorI2RlZmluZSBNSUlfTUdNVF9DT05GSUdfTk9fUFJFQU1CTEUJCSgweDAwMDAwMDEwKQorI2RlZmluZSBNSUlfTUdNVF9DT05GSUdfU0NBTl9JTkNSRU1FTlQJCSgweDAwMDAwMDIwKQorI2RlZmluZSBNSUlfTUdNVF9DT05GSUdfUkVTRVRfTUdNVAkJKDB4ODAwMDAwMDApCisKKyNkZWZpbmUgcmVnX01JSV9NR01UX0NPTU1BTkQoYmFzZSkJCV9fUkVHMzIoYmFzZSwgMHgwMDAwMDAyNCkKKyNkZWZpbmUgTUlJX01HTVRfQ09NTUFORF9SRUFEX0NZQ0xFCQkoMHgwMDAwMDAwMSkKKyNkZWZpbmUgTUlJX01HTVRfQ09NTUFORF9TQ0FOX0NZQ0xFCQkoMHgwMDAwMDAwMikKKworI2RlZmluZSByZWdfTUlJX01HTVRfQUREUkVTUyhiYXNlKQkJX19SRUczMihiYXNlLCAweDAwMDAwMDI4KQorI2RlZmluZSByZWdfTUlJX01HTVRfQ09OVFJPTChiYXNlKQkJX19SRUczMihiYXNlLCAweDAwMDAwMDJjKQorI2RlZmluZSByZWdfTUlJX01HTVRfU1RBVFVTKGJhc2UpCQlfX1JFRzMyKGJhc2UsIDB4MDAwMDAwMzApCisKKyNkZWZpbmUgcmVnX01JSV9NR01UX0lORElDQVRPUlMoYmFzZSkJCV9fUkVHMzIoYmFzZSwgMHgwMDAwMDAzNCkKKyNkZWZpbmUgTUlJX01HTVRfSU5ESUNBVE9SU19CVVNZCQkoMHgwMDAwMDAwMSkKKyNkZWZpbmUgTUlJX01HTVRfSU5ESUNBVE9SU19TQ0FOCQkoMHgwMDAwMDAwMikKKyNkZWZpbmUgTUlJX01HTVRfSU5ESUNBVE9SU19OT1RfVkFMSUQJCSgweDAwMDAwMDA0KQorCisjZGVmaW5lIHJlZ19JTlRFUkZBQ0VfU1RBVFVTKGJhc2UpCQlfX1JFRzMyKGJhc2UsIDB4MDAwMDAwM2MpCisjZGVmaW5lIElOVEVSRkFDRV9TVEFUVVNfTElOS19GQUlMCQkoMHgwMDAwMDAwOCkKKyNkZWZpbmUgSU5URVJGQUNFX1NUQVRVU19FWENFU1NfREVGRVIJCSgweDAwMDAwMjAwKQorCisjZGVmaW5lIHJlZ19TVEFUSU9OX0FERFJFU1NfMShiYXNlKQkJX19SRUczMihiYXNlLCAweDAwMDAwMDQwKQorI2RlZmluZSByZWdfU1RBVElPTl9BRERSRVNTXzIoYmFzZSkJCV9fUkVHMzIoYmFzZSwgMHgwMDAwMDA0NCkKKworI2RlZmluZSByZWdfUE9SVF9DT05UUk9MKGJhc2UpCQkJX19SRUczMihiYXNlLCAweDAwMDAwMjAwKQorI2RlZmluZSBQT1JUX0NPTlRST0xfUFJJCQkoMHgwMDAwMDAwMSkKKyNkZWZpbmUgUE9SVF9DT05UUk9MX0JQVAkJKDB4MDAwMTAwMDApCisjZGVmaW5lIFBPUlRfQ09OVFJPTF9TUEQJCSgweDAwMDQwMDAwKQorI2RlZmluZSBQT1JUX0NPTlRST0xfUkJDCQkoMHgwMDA4MDAwMCkKKyNkZWZpbmUgUE9SVF9DT05UUk9MX1BSQgkJKDB4MDAyMDAwMDApCisjZGVmaW5lIFBPUlRfQ09OVFJPTF9ESVMJCSgweDAwNDAwMDAwKQorI2RlZmluZSBQT1JUX0NPTlRST0xfVEJJCQkoMHgwMDgwMDAwMCkKKyNkZWZpbmUgUE9SVF9DT05UUk9MX1NURQkJKDB4MTAwMDAwMDApCisjZGVmaW5lIFBPUlRfQ09OVFJPTF9aT1IJCSgweDIwMDAwMDAwKQorI2RlZmluZSBQT1JUX0NPTlRST0xfQ0xSCQkoMHg0MDAwMDAwMCkKKyNkZWZpbmUgUE9SVF9DT05UUk9MX1NSVAkJKDB4ODAwMDAwMDApCisKKyNkZWZpbmUgcmVnX1RYX0NPTkZJRyhiYXNlKQkJX19SRUczMihiYXNlLCAweDAwMDAwMjIwKQorI2RlZmluZSBUWF9DT05GSUdfU1RBUlRfUQkJKDB4MDAwMDAwMDMpCisjZGVmaW5lIFRYX0NPTkZJR19FSFAJCQkoMHgwMDQwMDAwMCkKKyNkZWZpbmUgVFhfQ09ORklHX0NIUAkJCSgweDAwODAwMDAwKQorI2RlZmluZSBUWF9DT05GSUdfUlNUCQkJKDB4ODAwMDAwMDApCisKKyNkZWZpbmUgcmVnX1RYX0NPTlRST0woYmFzZSkJCV9fUkVHMzIoYmFzZSwgMHgwMDAwMDIyNCkKKyNkZWZpbmUgVFhfQ09OVFJPTF9HTwkJCSgweDAwMDA4MDAwKQorI2RlZmluZSBUWF9DT05UUk9MX01QCQkJKDB4MDEwMDAwMDApCisjZGVmaW5lIFRYX0NPTlRST0xfRUFJCQkJKDB4MjAwMDAwMDApCisjZGVmaW5lIFRYX0NPTlRST0xfQUJUCQkJKDB4NDAwMDAwMDApCisjZGVmaW5lIFRYX0NPTlRST0xfRUlJCQkJKDB4ODAwMDAwMDApCisKKyNkZWZpbmUgcmVnX1RYX1NUQVRVUyhiYXNlKQkJX19SRUczMihiYXNlLCAweDAwMDAwMjI4KQorI2RlZmluZSBUWF9TVEFUVVNfUVVFVUVfVVNBQkxFCQkoMHgwMDAwMDAwZikKKyNkZWZpbmUgVFhfU1RBVFVTX0NVUlJfUQkJKDB4MDAwMDAzMDApCisjZGVmaW5lIFRYX1NUQVRVU19BQ1QJCQkoMHgwMDAwODAwMCkKKyNkZWZpbmUgVFhfU1RBVFVTX1FVRVVFX0lETEUJCSgweDAwMGYwMDAwKQorI2RlZmluZSBUWF9TVEFUVVNfRU9RX1BFTkRJTkcJCSgweDBmMDAwMDAwKQorCisjZGVmaW5lIHJlZ19UWF9FWFRFTkRFRF9TVEFUVVMoYmFzZSkJCV9fUkVHMzIoYmFzZSwgMHgwMDAwMDIyYykKKyNkZWZpbmUgVFhfRVhURU5ERURfU1RBVFVTX0VORF9PRl9RVUVVRV9DT05ESVRJT04JCSgweDAwMDAwMDBmKQorI2RlZmluZSBUWF9FWFRFTkRFRF9TVEFUVVNfRU5EX09GX0ZSQU1FX0NPTkRJVElPTgkJKDB4MDAwMDBmMDApCisjZGVmaW5lIFRYX0VYVEVOREVEX1NUQVRVU19ERVNDUklQVE9SX0lOVEVSUlVQVF9DT05ESVRJT04JKDB4MDAwZjAwMDApCisjZGVmaW5lIFRYX0VYVEVOREVEX1NUQVRVU19FUlJPUl9GTEFHCQkJCSgweDBmMDAwMDAwKQorCisjZGVmaW5lIHJlZ19UWF9USFJFU0hPTERTKGJhc2UpCQkJX19SRUczMihiYXNlLCAweDAwMDAwMjMwKQorCisjZGVmaW5lIHJlZ19UWF9ESUFHTk9TVElDX0FERFIoYmFzZSkgICAgICAgICAgIF9fUkVHMzIoYmFzZSwgMHgwMDAwMDI3MCkKKyNkZWZpbmUgVFhfRElBR05PU1RJQ19BRERSX0lOREVYCQkoMHgwMDAwMDA3ZikKKyNkZWZpbmUgVFhfRElBR05PU1RJQ19BRERSX0RGUgkJCSgweDQwMDAwMDAwKQorI2RlZmluZSBUWF9ESUFHTk9TVElDX0FERFJfQUkJCQkoMHg4MDAwMDAwMCkKKworI2RlZmluZSByZWdfVFhfRElBR05PU1RJQ19EQVRBKGJhc2UpCQlfX1JFRzMyKGJhc2UsIDB4MDAwMDAyNzQpCisKKyNkZWZpbmUgcmVnX1RYX0VSUk9SX1NUQVRVUyhiYXNlKQkJX19SRUczMihiYXNlLCAweDAwMDAwMjc4KQorI2RlZmluZSBUWF9FUlJPUl9TVEFUVVMJCQkJKDB4MDAwMDAyNzgpCisjZGVmaW5lIFRYX0VSUk9SX1NUQVRVU19RVUVVRV8wX0VSUk9SX1JFU1BPTlNFCSgweDAwMDAwMDBmKQorI2RlZmluZSBUWF9FUlJPUl9TVEFUVVNfVEVBX09OX1FVRVVFXzAJCSgweDAwMDAwMDEwKQorI2RlZmluZSBUWF9FUlJPUl9TVEFUVVNfUkVSX09OX1FVRVVFXzAJCSgweDAwMDAwMDIwKQorI2RlZmluZSBUWF9FUlJPUl9TVEFUVVNfVEVSX09OX1FVRVVFXzAJCSgweDAwMDAwMDQwKQorI2RlZmluZSBUWF9FUlJPUl9TVEFUVVNfREVSX09OX1FVRVVFXzAJCSgweDAwMDAwMDgwKQorI2RlZmluZSBUWF9FUlJPUl9TVEFUVVNfUVVFVUVfMV9FUlJPUl9SRVNQT05TRQkoMHgwMDAwMGYwMCkKKyNkZWZpbmUgVFhfRVJST1JfU1RBVFVTX1RFQV9PTl9RVUVVRV8xCQkoMHgwMDAwMTAwMCkKKyNkZWZpbmUgVFhfRVJST1JfU1RBVFVTX1JFUl9PTl9RVUVVRV8xCQkoMHgwMDAwMjAwMCkKKyNkZWZpbmUgVFhfRVJST1JfU1RBVFVTX1RFUl9PTl9RVUVVRV8xCQkoMHgwMDAwNDAwMCkKKyNkZWZpbmUgVFhfRVJST1JfU1RBVFVTX0RFUl9PTl9RVUVVRV8xCQkoMHgwMDAwODAwMCkKKyNkZWZpbmUgVFhfRVJST1JfU1RBVFVTX1FVRVVFXzJfRVJST1JfUkVTUE9OU0UJKDB4MDAwZjAwMDApCisjZGVmaW5lIFRYX0VSUk9SX1NUQVRVU19URUFfT05fUVVFVUVfMgkJKDB4MDAxMDAwMDApCisjZGVmaW5lIFRYX0VSUk9SX1NUQVRVU19SRVJfT05fUVVFVUVfMgkJKDB4MDAyMDAwMDApCisjZGVmaW5lIFRYX0VSUk9SX1NUQVRVU19URVJfT05fUVVFVUVfMgkJKDB4MDA0MDAwMDApCisjZGVmaW5lIFRYX0VSUk9SX1NUQVRVU19ERVJfT05fUVVFVUVfMgkJKDB4MDA4MDAwMDApCisjZGVmaW5lIFRYX0VSUk9SX1NUQVRVU19RVUVVRV8zX0VSUk9SX1JFU1BPTlNFCSgweDBmMDAwMDAwKQorI2RlZmluZSBUWF9FUlJPUl9TVEFUVVNfVEVBX09OX1FVRVVFXzMJCSgweDEwMDAwMDAwKQorI2RlZmluZSBUWF9FUlJPUl9TVEFUVVNfUkVSX09OX1FVRVVFXzMJCSgweDIwMDAwMDAwKQorI2RlZmluZSBUWF9FUlJPUl9TVEFUVVNfVEVSX09OX1FVRVVFXzMJCSgweDQwMDAwMDAwKQorI2RlZmluZSBUWF9FUlJPUl9TVEFUVVNfREVSX09OX1FVRVVFXzMJCSgweDgwMDAwMDAwKQorCisjZGVmaW5lIHJlZ19UWF9RVUVVRV8wX0NPTkZJRyhiYXNlKQkJX19SRUczMihiYXNlLCAweDAwMDAwMjgwKQorI2RlZmluZSBUWF9RVUVVRV8wX0NPTkZJR19PQ05fUE9SVAkJKDB4MDAwMDAwM2YpCisjZGVmaW5lIFRYX1FVRVVFXzBfQ09ORklHX0JTV1AJCQkoMHgwMDAwMDQwMCkKKyNkZWZpbmUgVFhfUVVFVUVfMF9DT05GSUdfV1NXUAkJCSgweDAwMDAwODAwKQorI2RlZmluZSBUWF9RVUVVRV8wX0NPTkZJR19BTQkJCSgweDAwMDA0MDAwKQorI2RlZmluZSBUWF9RVUVVRV8wX0NPTkZJR19HVkkJCQkoMHgwMDAwODAwMCkKKyNkZWZpbmUgVFhfUVVFVUVfMF9DT05GSUdfRUVJCQkJKDB4MDAwMTAwMDApCisjZGVmaW5lIFRYX1FVRVVFXzBfQ09ORklHX0VMSQkJCSgweDAwMDIwMDAwKQorI2RlZmluZSBUWF9RVUVVRV8wX0NPTkZJR19FTkkJCQkoMHgwMDA0MDAwMCkKKyNkZWZpbmUgVFhfUVVFVUVfMF9DT05GSUdfRVNJCQkJKDB4MDAwODAwMDApCisjZGVmaW5lIFRYX1FVRVVFXzBfQ09ORklHX0VESQkJCSgweDAwMTAwMDAwKQorCisjZGVmaW5lIHJlZ19UWF9RVUVVRV8wX0JVRl9DT05GSUcoYmFzZSkJCV9fUkVHMzIoYmFzZSwgMHgwMDAwMDI4NCkKKyNkZWZpbmUgVFhfUVVFVUVfMF9CVUZfQ09ORklHX09DTl9QT1JUCQkoMHgwMDAwMDAzZikKKyNkZWZpbmUgVFhfUVVFVUVfMF9CVUZfQ09ORklHX0JVUlNUCQkoMHgwMDAwMDMwMCkKKyNkZWZpbmUgVFhfUVVFVUVfMF9CVUZfQ09ORklHX0JTV1AJCSgweDAwMDAwNDAwKQorI2RlZmluZSBUWF9RVUVVRV8wX0JVRl9DT05GSUdfV1NXUAkJKDB4MDAwMDA4MDApCisKKyNkZWZpbmUgT0NOX1BPUlRfSExQCQkJMAkvKiBITFAgSW50ZXJmYWNlICovCisjZGVmaW5lIE9DTl9QT1JUX1BDSV9YCQkJMQkvKiBQQ0ktWCBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgT0NOX1BPUlRfUFJPQ0VTU09SX01BU1RFUgkyCS8qIFByb2Nlc3NvciBJbnRlcmZhY2UgKG1hc3RlcikgKi8KKyNkZWZpbmUgT0NOX1BPUlRfUFJPQ0VTU09SX1NMQVZFCTMJLyogUHJvY2Vzc29yIEludGVyZmFjZSAoc2xhdmUpICovCisjZGVmaW5lIE9DTl9QT1JUX01FTU9SWQkJCTQJLyogTWVtb3J5IENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgT0NOX1BPUlRfRE1BCQkJNQkvKiBETUEgQ29udHJvbGxlciAqLworI2RlZmluZSBPQ05fUE9SVF9FVEhFUk5FVAkJNgkvKiBFdGhlcm5ldCBDb250cm9sbGVyICovCisjZGVmaW5lIE9DTl9QT1JUX1BSSU5UCQkJNwkvKiBQcmludCBFbmdpbmUgSW50ZXJmYWNlICovCisKKyNkZWZpbmUgcmVnX1RYX1FVRVVFXzBfUFRSX0xPVyhiYXNlKQkJX19SRUczMihiYXNlLCAweDAwMDAwMjg4KQorCisjZGVmaW5lIHJlZ19UWF9RVUVVRV8wX1BUUl9ISUdIKGJhc2UpCQlfX1JFRzMyKGJhc2UsIDB4MDAwMDAyOGMpCisjZGVmaW5lIFRYX1FVRVVFXzBfUFRSX0hJR0hfVkFMSUQJCSgweDgwMDAwMDAwKQorCisjZGVmaW5lIHJlZ19SWF9DT05GSUcoYmFzZSkJCQlfX1JFRzMyKGJhc2UsIDB4MDAwMDAzMjApCisjZGVmaW5lIFJYX0NPTkZJR19ERUZfUQkJCQkoMHgwMDAwMDAwMykKKyNkZWZpbmUgUlhfQ09ORklHX0VNRgkJCQkoMHgwMDAwMDEwMCkKKyNkZWZpbmUgUlhfQ09ORklHX0VVRgkJCQkoMHgwMDAwMDIwMCkKKyNkZWZpbmUgUlhfQ09ORklHX0JGRQkJCQkoMHgwMDAwMDQwMCkKKyNkZWZpbmUgUlhfQ09ORklHX01GRQkJCQkoMHgwMDAwMDgwMCkKKyNkZWZpbmUgUlhfQ09ORklHX1VGRQkJCQkoMHgwMDAwMTAwMCkKKyNkZWZpbmUgUlhfQ09ORklHX1NFCQkJCSgweDAwMDAyMDAwKQorI2RlZmluZSBSWF9DT05GSUdfQUJGCQkJCSgweDAwMjAwMDAwKQorI2RlZmluZSBSWF9DT05GSUdfQVBFCQkJCSgweDAwNDAwMDAwKQorI2RlZmluZSBSWF9DT05GSUdfQ0hQCQkJCSgweDAwODAwMDAwKQorI2RlZmluZSBSWF9DT05GSUdfUlNUCQkJCSgweDgwMDAwMDAwKQorCisjZGVmaW5lIHJlZ19SWF9DT05UUk9MKGJhc2UpCQkJX19SRUczMihiYXNlLCAweDAwMDAwMzI0KQorI2RlZmluZSBHRV9FMF9SWF9DT05UUk9MX1FVRVVFX0VOQUJMRVMJCSgweDAwMDAwMDBmKQorI2RlZmluZSBHRV9FMF9SWF9DT05UUk9MX0dPCQkJKDB4MDAwMDgwMDApCisjZGVmaW5lIEdFX0UwX1JYX0NPTlRST0xfRUFJCQkJKDB4MjAwMDAwMDApCisjZGVmaW5lIEdFX0UwX1JYX0NPTlRST0xfQUJUCQkJKDB4NDAwMDAwMDApCisjZGVmaW5lIEdFX0UwX1JYX0NPTlRST0xfRUlJCQkJKDB4ODAwMDAwMDApCisKKyNkZWZpbmUgcmVnX1JYX0VYVEVOREVEX1NUQVRVUyhiYXNlKQkJX19SRUczMihiYXNlLCAweDAwMDAwMzJjKQorI2RlZmluZSBSWF9FWFRFTkRFRF9TVEFUVVMJCQkoMHgwMDAwMDMyYykKKyNkZWZpbmUgUlhfRVhURU5ERURfU1RBVFVTX0VPUQkJCSgweDAwMDAwMDBmKQorI2RlZmluZSBSWF9FWFRFTkRFRF9TVEFUVVNfRU9RXzAJCSgweDAwMDAwMDAxKQorI2RlZmluZSBSWF9FWFRFTkRFRF9TVEFUVVNfRU9GCQkJKDB4MDAwMDBmMDApCisjZGVmaW5lIFJYX0VYVEVOREVEX1NUQVRVU19ERVNDUklQVE9SX0lOVEVSUlVQVF9DT05ESVRJT04JKDB4MDAwZjAwMDApCisjZGVmaW5lIFJYX0VYVEVOREVEX1NUQVRVU19FUlJPUl9GTEFHCQkJCSgweDBmMDAwMDAwKQorCisjZGVmaW5lIHJlZ19SWF9USFJFU0hPTERTKGJhc2UpCQkJX19SRUczMihiYXNlLCAweDAwMDAwMzMwKQorCisjZGVmaW5lIHJlZ19SWF9ESUFHTk9TVElDX0FERFIoYmFzZSkJCV9fUkVHMzIoYmFzZSwgMHgwMDAwMDM3MCkKKyNkZWZpbmUgUlhfRElBR05PU1RJQ19BRERSX0lOREVYCQkoMHgwMDAwMDA3ZikKKyNkZWZpbmUgUlhfRElBR05PU1RJQ19BRERSX0RGUgkJCSgweDQwMDAwMDAwKQorI2RlZmluZSBSWF9ESUFHTk9TVElDX0FERFJfQUkJCQkoMHg4MDAwMDAwMCkKKworI2RlZmluZSByZWdfUlhfRElBR05PU1RJQ19EQVRBKGJhc2UpCQlfX1JFRzMyKGJhc2UsIDB4MDAwMDAzNzQpCisKKyNkZWZpbmUgcmVnX1JYX1FVRVVFXzBfQ09ORklHKGJhc2UpCQlfX1JFRzMyKGJhc2UsIDB4MDAwMDAzODApCisjZGVmaW5lIFJYX1FVRVVFXzBfQ09ORklHX09DTl9QT1JUCQkoMHgwMDAwMDAzZikKKyNkZWZpbmUgUlhfUVVFVUVfMF9DT05GSUdfQlNXUAkJCSgweDAwMDAwNDAwKQorI2RlZmluZSBSWF9RVUVVRV8wX0NPTkZJR19XU1dQCQkJKDB4MDAwMDA4MDApCisjZGVmaW5lIFJYX1FVRVVFXzBfQ09ORklHX0FNCQkJKDB4MDAwMDQwMDApCisjZGVmaW5lIFJYX1FVRVVFXzBfQ09ORklHX0VFSQkJCSgweDAwMDEwMDAwKQorI2RlZmluZSBSWF9RVUVVRV8wX0NPTkZJR19FTEkJCQkoMHgwMDAyMDAwMCkKKyNkZWZpbmUgUlhfUVVFVUVfMF9DT05GSUdfRU5JCQkJKDB4MDAwNDAwMDApCisjZGVmaW5lIFJYX1FVRVVFXzBfQ09ORklHX0VTSQkJCSgweDAwMDgwMDAwKQorI2RlZmluZSBSWF9RVUVVRV8wX0NPTkZJR19FREkJCQkoMHgwMDEwMDAwMCkKKworI2RlZmluZSByZWdfUlhfUVVFVUVfMF9CVUZfQ09ORklHKGJhc2UpCQlfX1JFRzMyKGJhc2UsIDB4MDAwMDAzODQpCisjZGVmaW5lIFJYX1FVRVVFXzBfQlVGX0NPTkZJR19PQ05fUE9SVAkJKDB4MDAwMDAwM2YpCisjZGVmaW5lIFJYX1FVRVVFXzBfQlVGX0NPTkZJR19CVVJTVAkJKDB4MDAwMDAzMDApCisjZGVmaW5lIFJYX1FVRVVFXzBfQlVGX0NPTkZJR19CU1dQCQkoMHgwMDAwMDQwMCkKKyNkZWZpbmUgUlhfUVVFVUVfMF9CVUZfQ09ORklHX1dTV1AJCSgweDAwMDAwODAwKQorCisjZGVmaW5lIHJlZ19SWF9RVUVVRV8wX1BUUl9MT1coYmFzZSkJCV9fUkVHMzIoYmFzZSwgMHgwMDAwMDM4OCkKKworI2RlZmluZSByZWdfUlhfUVVFVUVfMF9QVFJfSElHSChiYXNlKQkJX19SRUczMihiYXNlLCAweDAwMDAwMzhjKQorI2RlZmluZSBSWF9RVUVVRV8wX1BUUl9ISUdIX1ZBTElECQkoMHg4MDAwMDAwMCkKKworLyoKKyAqICBQSFkgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKKyAqLworLyogdGhlIGZpcnN0IDE1IFBIWSByZWdpc3RlcnMgYXJlIHN0YW5kYXJkLiAqLworI2RlZmluZSBQSFlfQ1RSTF9SRUcJCTAJLyogQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBQSFlfU1RBVFVTX1JFRwkJMQkvKiBTdGF0dXMgUmVnaXNlciAqLworI2RlZmluZSBQSFlfSUQxX1JFRwkJMgkvKiBQaHkgSWQgUmVnICh3b3JkIDEpICovCisjZGVmaW5lIFBIWV9JRDJfUkVHCQkzCS8qIFBoeSBJZCBSZWcgKHdvcmQgMikgKi8KKyNkZWZpbmUgUEhZX0FOX0FEVl9SRUcJCTQJLyogQXV0b25lZyBBZHZlcnRpc2VtZW50ICovCisjZGVmaW5lIFBIWV9MUF9BQklMSVRZX1JFRwk1CS8qIExpbmsgUGFydG5lciBBYmlsaXR5IChCYXNlIFBhZ2UpICovCisjZGVmaW5lIFBIWV9BVVRPTkVHX0VYUF9SRUcJNgkvKiBBdXRvbmVnIEV4cGFuc2lvbiBSZWcgKi8KKyNkZWZpbmUgUEhZX05FWFRfUEFHRV9UWF9SRUcJNwkvKiBOZXh0IFBhZ2UgVFggKi8KKyNkZWZpbmUgUEhZX0xQX05FWFRfUEFHRV9SRUcJOAkvKiBMaW5rIFBhcnRuZXIgTmV4dCBQYWdlICovCisjZGVmaW5lIFBIWV8xMDAwVF9DVFJMX1JFRwk5CS8qIDEwMDBCYXNlLVQgQ29udHJvbCBSZWcgKi8KKyNkZWZpbmUgUEhZXzEwMDBUX1NUQVRVU19SRUcJMTAJLyogMTAwMEJhc2UtVCBTdGF0dXMgUmVnICovCisjZGVmaW5lIFBIWV9FWFRfU1RBVFVTX1JFRwkxMQkvKiBFeHRlbmRlZCBTdGF0dXMgUmVnICovCisKKy8qCisgKiBQSFkgUmVnaXN0ZXIgYml0IG1hc2tzLgorICovCisjZGVmaW5lIFBIWV9DVFJMX1JFU0VUCQkoMSA8PCAxNSkKKyNkZWZpbmUgUEhZX0NUUkxfTE9PUEJBQ0sJKDEgPDwgMTQpCisjZGVmaW5lIFBIWV9DVFJMX1NQRUVEMAkJKDEgPDwgMTMpCisjZGVmaW5lIFBIWV9DVFJMX0FOX0VOCQkoMSA8PCAxMikKKyNkZWZpbmUgUEhZX0NUUkxfUFdSX0ROCQkoMSA8PCAxMSkKKyNkZWZpbmUgUEhZX0NUUkxfSVNPTEFURQkoMSA8PCAxMCkKKyNkZWZpbmUgUEhZX0NUUkxfUkVTVEFSVF9BTgkoMSA8PCA5KQorI2RlZmluZSBQSFlfQ1RSTF9GVUxMX0RVUExFWAkoMSA8PCA4KQorI2RlZmluZSBQSFlfQ1RSTF9DVF9FTgkJKDEgPDwgNykKKyNkZWZpbmUgUEhZX0NUUkxfU1BFRUQxCQkoMSA8PCA2KQorCisjZGVmaW5lIFBIWV9TVEFUXzEwMEJBU0VfVDQJKDEgPDwgMTUpCisjZGVmaW5lIFBIWV9TVEFUXzEwMEJBU0VfWF9GRAkoMSA8PCAxNCkKKyNkZWZpbmUgUEhZX1NUQVRfMTAwQkFTRV9YX0hECSgxIDw8IDEzKQorI2RlZmluZSBQSFlfU1RBVF8xMEJBU0VfVF9GRAkoMSA8PCAxMikKKyNkZWZpbmUgUEhZX1NUQVRfMTBCQVNFX1RfSEQJKDEgPDwgMTEpCisjZGVmaW5lIFBIWV9TVEFUXzEwMEJBU0VfVDJfRkQJKDEgPDwgMTApCisjZGVmaW5lIFBIWV9TVEFUXzEwMEJBU0VfVDJfSEQJKDEgPDwgOSkKKyNkZWZpbmUgUEhZX1NUQVRfRVhUX1NUQVQJKDEgPDwgOCkKKyNkZWZpbmUgUEhZX1NUQVRfUkVTRVJWRUQJKDEgPDwgNykKKyNkZWZpbmUgUEhZX1NUQVRfTUZQUwkJKDEgPDwgNikJLyogTWFuYWdlbWVudCBGcmFtZXMgUHJlYW1ibGUgU3VwcHJlc3Npb24gKi8KKyNkZWZpbmUgUEhZX1NUQVRfQU5fQ09NUExFVEUJKDEgPDwgNSkKKyNkZWZpbmUgUEhZX1NUQVRfUkVNX0ZBVUxUCSgxIDw8IDQpCisjZGVmaW5lIFBIWV9TVEFUX0FOX0NBUAkJKDEgPDwgMykKKyNkZWZpbmUgUEhZX1NUQVRfTElOS19VUAkoMSA8PCAyKQorI2RlZmluZSBQSFlfU1RBVF9KQUJCRVIJCSgxIDw8IDEpCisjZGVmaW5lIFBIWV9TVEFUX0VYVF9DQVAJKDEgPDwgMCkKKworI2RlZmluZSBUQklfQ09OVFJPTF8yCQkJCQkweDExCisjZGVmaW5lIFRCSV9DT05UUk9MXzJfRU5BQkxFX0NPTU1BX0RFVEVDVAkJMHgwMDAxCisjZGVmaW5lIFRCSV9DT05UUk9MXzJfRU5BQkxFX1dSQVAJCQkweDAwMDIKKyNkZWZpbmUgVEJJX0NPTlRST0xfMl9HX01JSV9NT0RFCQkJMHgwMDEwCisjZGVmaW5lIFRCSV9DT05UUk9MXzJfUkVDRUlWRV9DTE9DS19TRUxFQ1QJCTB4MDAyMAorI2RlZmluZSBUQklfQ09OVFJPTF8yX0FVVE9fTkVHT1RJQVRJT05fU0VOU0UJCTB4MDEwMAorI2RlZmluZSBUQklfQ09OVFJPTF8yX0RJU0FCTEVfVFJBTlNNSVRfUlVOTklOR19ESVNQQVJJVFkJMHgxMDAwCisjZGVmaW5lIFRCSV9DT05UUk9MXzJfRElTQUJMRV9SRUNFSVZFX1JVTk5JTkdfRElTUEFSSVRZCQkweDIwMDAKKyNkZWZpbmUgVEJJX0NPTlRST0xfMl9TSE9SVENVVF9MSU5LX1RJTUVSCQkJMHg0MDAwCisjZGVmaW5lIFRCSV9DT05UUk9MXzJfU09GVF9SRVNFVAkJCQkweDgwMDAKKworLyogbWFydmVsIHNwZWNpZmljICovCisjZGVmaW5lIE1WMTExMV9FWFRfQ1RSTDFfUkVHCTE2CS8qIFBIWSBTcGVjaWZpYyBDb250cm9sIFJlZyAqLworI2RlZmluZSBNVjExMTFfU1BFQ19TVEFUX1JFRwkxNwkvKiBQSFkgU3BlY2lmaWMgU3RhdHVzIFJlZyAqLworI2RlZmluZSBNVjExMTFfRVhUX0NUUkwyX1JFRwkyMAkvKiBFeHRlbmRlZCBQSFkgU3BlY2lmaWMgQ29udHJvbCBSZWcgKi8KKworLyoKKyAqIE1BUlZFTEwgODhFMTExMSBQSFkgcmVnaXN0ZXIgYml0IG1hc2tzCisgKi8KKy8qIFBIWSBTcGVjaWZpYyBTdGF0dXMgUmVnaXN0ZXIgKE1WMTExMV9FWFRfQ1RSTDFfUkVHKSAqLworCisjZGVmaW5lIFNQRUNfU1RBVF9TUEVFRF9NQVNLCSgzIDw8IDE0KQorI2RlZmluZSBTUEVDX1NUQVRfRlVMTF9EVVAJKDEgPDwgMTMpCisjZGVmaW5lIFNQRUNfU1RBVF9QQUdFX1JDVkQJKDEgPDwgMTIpCisjZGVmaW5lIFNQRUNfU1RBVF9SRVNPTFZFRAkoMSA8PCAxMSkJLyogU3BlZWQgYW5kIER1cGxleCBSZXNvbHZlZCAqLworI2RlZmluZSBTUEVDX1NUQVRfTElOS19VUAkoMSA8PCAxMCkKKyNkZWZpbmUgU1BFQ19TVEFUX0NBQkxFX0xFTl9NQVNLCSg3IDw8IDcpLyogQ2FibGUgTGVuZ3RoICgxMDAvMTAwMCBtb2RlcyBvbmx5KSAqLworI2RlZmluZSBTUEVDX1NUQVRfTURJWAkJKDEgPDwgNikKKyNkZWZpbmUgU1BFQ19TVEFUX1BPTEFSSVRZCSgxIDw8IDEpCisjZGVmaW5lIFNQRUNfU1RBVF9KQUJCRVIJKDEgPDwgMCkKKworI2RlZmluZSBTUEVFRF8xMDAwCQkoMiA8PCAxNCkKKyNkZWZpbmUgU1BFRURfMTAwCQkoMSA8PCAxNCkKKyNkZWZpbmUgU1BFRURfMTAJCSgwIDw8IDE0KQorCisjZGVmaW5lIFRCSV9BRERSCTB4MUUJLyogVGVuIEJpdCBJbnRlcmZhY2UgYWRkcmVzcyAqLworCisvKiBuZWdvdGlhdGVkIGxpbmsgcGFyYW1ldGVycyAqLworI2RlZmluZSBMSU5LX1NQRUVEX1VOS05PV04JMAorI2RlZmluZSBMSU5LX1NQRUVEXzEwCQkxCisjZGVmaW5lIExJTktfU1BFRURfMTAwCQkyCisjZGVmaW5lIExJTktfU1BFRURfMTAwMAkJMworCisjZGVmaW5lIExJTktfRFVQTEVYX1VOS05PV04JMAorI2RlZmluZSBMSU5LX0RVUExFWF9IQUxGCTEKKyNkZWZpbmUgTElOS19EVVBMRVhfRlVMTAkyCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGh5X2FkZHJlc3NbXSA9IHsgOCwgOSB9OworCisjZGVmaW5lIHZ1aW50MzIgdm9sYXRpbGUgdTMyCisKKy8qIFRYL1JYIGJ1ZmZlciBkZXNjcmlwdG9ycy4gTVVTVCBiZSBjYWNoZSBsaW5lIGFsaWduZWQgaW4gbWVtb3J5LiAoMzIgYnl0ZSkKKyAqIFRoaXMgc3RydWN0dXJlIGlzIGFjY2Vzc2VkIGJ5IHRoZSBldGhlcm5ldCBETUEgZW5naW5lIHdoaWNoIG1lYW5zIGl0CisgKiBNVVNUIGJlIGluIExJVFRMRSBFTkRJQU4gZm9ybWF0ICovCitzdHJ1Y3QgZG1hX2Rlc2NyaXB0b3IgeworCXZ1aW50MzIgc3RhcnRfYWRkcjA7CS8qIGJ1ZmZlciBhZGRyZXNzLCBsZWFzdCBzaWduaWZpY2FudCBieXRlcy4gKi8KKwl2dWludDMyIHN0YXJ0X2FkZHIxOwkvKiBidWZmZXIgYWRkcmVzcywgbW9zdCBzaWduaWZpY2FudCBieXRlcy4gKi8KKwl2dWludDMyIG5leHRfZGVzY3JfYWRkcjA7LyogbmV4dCBkZXNjcmlwdG9yIGFkZHJlc3MsIGxlYXN0IHNpZ25pZmljYW50IGJ5dGVzLiAgTXVzdCBiZSA2NC1iaXQgYWxpZ25lZC4gKi8KKwl2dWludDMyIG5leHRfZGVzY3JfYWRkcjE7LyogbmV4dCBkZXNjcmlwdG9yIGFkZHJlc3MsIG1vc3Qgc2lnbmlmaWNhbnQgYnl0ZXMuICovCisJdnVpbnQzMiB2bGFuX2J5dGVfY291bnQ7LyogVkxBTiB0YWcodG9wIDIgYnl0ZXMpIGFuZCBieXRlIGNvdW50dCAoYm90dG9tIDIgYnl0ZXMpLiAqLworCXZ1aW50MzIgY29uZmlnX3N0YXR1czsJLyogQ29uZmlndXJhdGlvbi9TdGF0dXMuICovCisJdnVpbnQzMiByZXNlcnZlZDE7CS8qIHJlc2VydmVkIHRvIG1ha2UgdGhlIGRlc2NyaXB0b3IgY2FjaGUgbGluZSBhbGlnbmVkLiAqLworCXZ1aW50MzIgcmVzZXJ2ZWQyOwkvKiByZXNlcnZlZCB0byBtYWtlIHRoZSBkZXNjcmlwdG9yIGNhY2hlIGxpbmUgYWxpZ25lZC4gKi8KK307CisKKy8qIGxhc3QgbmV4dCBkZXNjcmlwdG9yIGFkZHJlc3MgZmxhZyAqLworI2RlZmluZSBETUFfREVTQ1JfTEFTVAkJKDEgPDwgMzEpCisKKy8qIFRYIERNQSBkZXNjcmlwdG9yIGNvbmZpZyBzdGF0dXMgYml0cyAqLworI2RlZmluZSBETUFfREVTQ1JfVFhfRU9GCSgxIDw8ICAwKQkvKiBlbmQgb2YgZnJhbWUgKi8KKyNkZWZpbmUgRE1BX0RFU0NSX1RYX1NPRgkoMSA8PCAgMSkJLyogc3RhcnQgb2YgZnJhbWUgKi8KKyNkZWZpbmUgRE1BX0RFU0NSX1RYX1BGVkxBTgkoMSA8PCAgMikKKyNkZWZpbmUgRE1BX0RFU0NSX1RYX0hVR0UJKDEgPDwgIDMpCisjZGVmaW5lIERNQV9ERVNDUl9UWF9QQUQJKDEgPDwgIDQpCisjZGVmaW5lIERNQV9ERVNDUl9UWF9DUkMJKDEgPDwgIDUpCisjZGVmaW5lIERNQV9ERVNDUl9UWF9ERVNDUl9JTlQJKDEgPDwgMTQpCisjZGVmaW5lIERNQV9ERVNDUl9UWF9SRVRSWV9DT1VOVAkweDAwMEYwMDAwCisjZGVmaW5lIERNQV9ERVNDUl9UWF9PTkVfQ09MTElTSU9OCSgxIDw8IDIwKQorI2RlZmluZSBETUFfREVTQ1JfVFhfTEFURV9DT0xMSVNJT04JKDEgPDwgMjQpCisjZGVmaW5lIERNQV9ERVNDUl9UWF9VTkRFUlJVTgkJKDEgPDwgMjUpCisjZGVmaW5lIERNQV9ERVNDUl9UWF9SRVRSWV9MSU1JVAkoMSA8PCAyNikKKyNkZWZpbmUgRE1BX0RFU0NSX1RYX09LCQkJKDEgPDwgMzApCisjZGVmaW5lIERNQV9ERVNDUl9UWF9PV05FUgkJKDEgPDwgMzEpCisKKy8qIFJYIERNQSBkZXNjcmlwdG9yIHN0YXR1cyBiaXRzICovCisjZGVmaW5lIERNQV9ERVNDUl9SWF9FT0YJCSgxIDw8ICAwKQorI2RlZmluZSBETUFfREVTQ1JfUlhfU09GCQkoMSA8PCAgMSkKKyNkZWZpbmUgRE1BX0RFU0NSX1JYX1ZURgkJKDEgPDwgIDIpCisjZGVmaW5lIERNQV9ERVNDUl9SWF9GUkFNRV9JU19UWVBFCSgxIDw8ICAzKQorI2RlZmluZSBETUFfREVTQ1JfUlhfU0hPUlRfRlJBTUUJKDEgPDwgIDQpCisjZGVmaW5lIERNQV9ERVNDUl9SWF9IQVNIX01BVENICQkoMSA8PCAgNykKKyNkZWZpbmUgRE1BX0RFU0NSX1JYX0JBRF9GUkFNRQkJKDEgPDwgIDgpCisjZGVmaW5lIERNQV9ERVNDUl9SWF9PVkVSUlVOCQkoMSA8PCAgOSkKKyNkZWZpbmUgRE1BX0RFU0NSX1JYX01BWF9GUkFNRV9MRU4JKDEgPDwgMTEpCisjZGVmaW5lIERNQV9ERVNDUl9SWF9DUkNfRVJST1IJCSgxIDw8IDEyKQorI2RlZmluZSBETUFfREVTQ1JfUlhfREVTQ1JfSU5UCQkoMSA8PCAxMykKKyNkZWZpbmUgRE1BX0RFU0NSX1JYX09XTkVSCQkoMSA8PCAxNSkKKworI2RlZmluZSBSWF9CVUZGRVJfU0laRQlQS1RTSVpFCisjZGVmaW5lIE5VTV9SWF9ERVNDCVBLVEJVRlNSWAorCitzdGF0aWMgc3RydWN0IGRtYV9kZXNjcmlwdG9yIHR4X2Rlc2NyaXB0b3IgX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoMzIpKSk7CisKK3N0YXRpYyBzdHJ1Y3QgZG1hX2Rlc2NyaXB0b3IgcnhfZGVzY3JfYXJyYXlbTlVNX1JYX0RFU0NdCisJX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoMzIpKSk7CisKK3N0YXRpYyBzdHJ1Y3QgZG1hX2Rlc2NyaXB0b3IgKnJ4X2Rlc2NyX2N1cnJlbnQ7CisKK3N0YXRpYyBpbnQgdHNpMTA4X2V0aF9wcm9iZSAoc3RydWN0IGV0aF9kZXZpY2UgKmRldiwgYmRfdCAqIGJpcyk7CitzdGF0aWMgaW50IHRzaTEwOF9ldGhfc2VuZCAoc3RydWN0IGV0aF9kZXZpY2UgKmRldiwKKwkJCSAgIHZvbGF0aWxlIHZvaWQgKnBhY2tldCwgaW50IGxlbmd0aCk7CitzdGF0aWMgaW50IHRzaTEwOF9ldGhfcmVjdiAoc3RydWN0IGV0aF9kZXZpY2UgKmRldik7CitzdGF0aWMgdm9pZCB0c2kxMDhfZXRoX2hhbHQgKHN0cnVjdCBldGhfZGV2aWNlICpkZXYpOworc3RhdGljIHVuc2lnbmVkIGludCByZWFkX3BoeSAodW5zaWduZWQgaW50IGJhc2UsCisJCQkgICAgIHVuc2lnbmVkIGludCBwaHlfYWRkciwgdW5zaWduZWQgaW50IHBoeV9yZWcpOworc3RhdGljIHZvaWQgd3JpdGVfcGh5ICh1bnNpZ25lZCBpbnQgYmFzZSwKKwkJICAgICAgdW5zaWduZWQgaW50IHBoeV9hZGRyLAorCQkgICAgICB1bnNpZ25lZCBpbnQgcGh5X3JlZywgdW5zaWduZWQgaW50IHBoeV9kYXRhKTsKKworI2lmIFRTSTEwOF9FVEhfREVCVUcgPiAxMDAKKy8qCisgKiBwcmludCBwaHkgZGVidWcgaW5mb21hdGlvbgorICovCitzdGF0aWMgdm9pZCBkdW1wX3BoeV9yZWdzICh1bnNpZ25lZCBpbnQgcGh5X2FkZHIpCit7CisJaW50IGk7CisKKwlwcmludGYgKCJQSFkgJWQgcmVnaXN0ZXJzXG4iLCBwaHlfYWRkcik7CisJZm9yIChpID0gMDsgaSA8PSAzMDsgaSsrKSB7CisJCXByaW50ZiAoIiUyZCAgMHglMDR4XG4iLCBpLCByZWFkX3BoeSAoRVRIX0JBU0UsIHBoeV9hZGRyLCBpKSk7CisJfQorCXByaW50ZiAoIlxuIik7CisKK30KKyNlbHNlCisjZGVmaW5lIGR1bXBfcGh5X3JlZ3MoYmFzZSkgZG97fXdoaWxlKDApCisjZW5kaWYKKworI2lmIFRTSTEwOF9FVEhfREVCVUcgPiAxMDAKKy8qCisgKiBwcmludCBkZWJ1ZyBpbmZvbWF0aW9uCisgKi8KK3N0YXRpYyB2b2lkIHR4X2RpYWdfcmVncyAodW5zaWduZWQgaW50IGJhc2UpCit7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBkdW1teTsKKworCXByaW50ZiAoIlRYIGRpYWdub3N0aWNzIHJlZ2lzdGVyc1xuIik7CisJcmVnX1RYX0RJQUdOT1NUSUNfQUREUihiYXNlKSA9IDB4MDAgfCBUWF9ESUFHTk9TVElDX0FERFJfQUk7CisJdWRlbGF5ICgxMDAwKTsKKwlkdW1teSA9IHJlZ19UWF9ESUFHTk9TVElDX0RBVEEoYmFzZSk7CisJZm9yIChpID0gMHgwMDsgaSA8PSAweDA1OyBpKyspIHsKKwkJdWRlbGF5ICgxMDAwKTsKKwkJcHJpbnRmICgiMHglMDJ4ICAweCUwOHhcbiIsIGksIHJlZ19UWF9ESUFHTk9TVElDX0RBVEEoYmFzZSkpOworCX0KKwlyZWdfVFhfRElBR05PU1RJQ19BRERSKGJhc2UpID0gMHg0MCB8IFRYX0RJQUdOT1NUSUNfQUREUl9BSTsKKwl1ZGVsYXkgKDEwMDApOworCWR1bW15ID0gcmVnX1RYX0RJQUdOT1NUSUNfREFUQShiYXNlKTsKKwlmb3IgKGkgPSAweDQwOyBpIDw9IDB4NDc7IGkrKykgeworCQl1ZGVsYXkgKDEwMDApOworCQlwcmludGYgKCIweCUwMnggIDB4JTA4eFxuIiwgaSwgcmVnX1RYX0RJQUdOT1NUSUNfREFUQShiYXNlKSk7CisJfQorCXByaW50ZiAoIlxuIik7CisKK30KKyNlbHNlCisjZGVmaW5lIHR4X2RpYWdfcmVncyhiYXNlKSBkb3t9d2hpbGUoMCkKKyNlbmRpZgorCisjaWYgVFNJMTA4X0VUSF9ERUJVRyA+IDEwMAorLyoKKyAqIHByaW50IGRlYnVnIGluZm9tYXRpb24KKyAqLworc3RhdGljIHZvaWQgcnhfZGlhZ19yZWdzICh1bnNpZ25lZCBpbnQgYmFzZSkKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGR1bW15OworCisJcHJpbnRmICgiUlggZGlhZ25vc3RpY3MgcmVnaXN0ZXJzXG4iKTsKKwlyZWdfUlhfRElBR05PU1RJQ19BRERSKGJhc2UpID0gMHgwMCB8IFJYX0RJQUdOT1NUSUNfQUREUl9BSTsKKwl1ZGVsYXkgKDEwMDApOworCWR1bW15ID0gcmVnX1JYX0RJQUdOT1NUSUNfREFUQShiYXNlKTsKKwlmb3IgKGkgPSAweDAwOyBpIDw9IDB4MDU7IGkrKykgeworCQl1ZGVsYXkgKDEwMDApOworCQlwcmludGYgKCIweCUwMnggIDB4JTA4eFxuIiwgaSwgcmVnX1JYX0RJQUdOT1NUSUNfREFUQShiYXNlKSk7CisJfQorCXJlZ19SWF9ESUFHTk9TVElDX0FERFIoYmFzZSkgPSAweDQwIHwgUlhfRElBR05PU1RJQ19BRERSX0FJOworCXVkZWxheSAoMTAwMCk7CisJZHVtbXkgPSByZWdfUlhfRElBR05PU1RJQ19EQVRBKGJhc2UpOworCWZvciAoaSA9IDB4MDg7IGkgPD0gMHgwYTsgaSsrKSB7CisJCXVkZWxheSAoMTAwMCk7CisJCXByaW50ZiAoIjB4JTAyeCAgMHglMDh4XG4iLCBpLCByZWdfUlhfRElBR05PU1RJQ19EQVRBKGJhc2UpKTsKKwl9CisJcHJpbnRmICgiXG4iKTsKKworfQorI2Vsc2UKKyNkZWZpbmUgcnhfZGlhZ19yZWdzKGJhc2UpIGRve313aGlsZSgwKQorI2VuZGlmCisKKyNpZiBUU0kxMDhfRVRIX0RFQlVHID4gMTAwCisvKgorICogcHJpbnQgZGVidWcgaW5mb21hdGlvbgorICovCitzdGF0aWMgdm9pZCBkZWJ1Z19taWlfcmVncyAodW5zaWduZWQgaW50IGJhc2UpCit7CisJcHJpbnRmICgiTUlJX01HTVRfQ09ORklHICAgICAweCUwOHhcbiIsIHJlZ19NSUlfTUdNVF9DT05GSUcoYmFzZSkpOworCXByaW50ZiAoIk1JSV9NR01UX0NPTU1BTkQgICAgMHglMDh4XG4iLCByZWdfTUlJX01HTVRfQ09NTUFORChiYXNlKSk7CisJcHJpbnRmICgiTUlJX01HTVRfQUREUkVTUyAgICAweCUwOHhcbiIsIHJlZ19NSUlfTUdNVF9BRERSRVNTKGJhc2UpKTsKKwlwcmludGYgKCJNSUlfTUdNVF9DT05UUk9MICAgIDB4JTA4eFxuIiwgcmVnX01JSV9NR01UX0NPTlRST0woYmFzZSkpOworCXByaW50ZiAoIk1JSV9NR01UX1NUQVRVUyAgICAgMHglMDh4XG4iLCByZWdfTUlJX01HTVRfU1RBVFVTKGJhc2UpKTsKKwlwcmludGYgKCJNSUlfTUdNVF9JTkRJQ0FUT1JTIDB4JTA4eFxuIiwgcmVnX01JSV9NR01UX0lORElDQVRPUlMoYmFzZSkpOworCXByaW50ZiAoIlxuIik7CisKK30KKyNlbHNlCisjZGVmaW5lIGRlYnVnX21paV9yZWdzKGJhc2UpIGRve313aGlsZSgwKQorI2VuZGlmCisKKy8qCisgKiBXYWl0IHVudGlsIHRoZSBwaHkgYnVzIGlzIG5vbi1idXN5CisgKi8KK3N0YXRpYyB2b2lkIHBoeV93YWl0ICh1bnNpZ25lZCBpbnQgYmFzZSwgdW5zaWduZWQgaW50IGNvbmRpdGlvbikKK3sKKwlpbnQgdGltZW91dDsKKworCXRpbWVvdXQgPSAwOworCXdoaWxlIChyZWdfTUlJX01HTVRfSU5ESUNBVE9SUyhiYXNlKSAmIGNvbmRpdGlvbikgeworCQl1ZGVsYXkgKDEwKTsKKwkJaWYgKCsrdGltZW91dCA+IDEwMDAwKSB7CisJCQlwcmludGYgKCJFUlJPUjogdGltZW91dCB3YWl0aW5nIGZvciBwaHkgYnVzICglZClcbiIsCisJCQkgICAgICAgY29uZGl0aW9uKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCisvKgorICogcmVhZCBwaHkgcmVnaXN0ZXIKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCByZWFkX3BoeSAodW5zaWduZWQgaW50IGJhc2UsCisJCQkgICAgIHVuc2lnbmVkIGludCBwaHlfYWRkciwgdW5zaWduZWQgaW50IHBoeV9yZWcpCit7CisJdW5zaWduZWQgaW50IHZhbHVlOworCisJcGh5X3dhaXQgKGJhc2UsIE1JSV9NR01UX0lORElDQVRPUlNfQlVTWSk7CisKKwlyZWdfTUlJX01HTVRfQUREUkVTUyhiYXNlKSA9IChwaHlfYWRkciA8PCA4KSB8IHBoeV9yZWc7CisKKwkvKiBFbnN1cmUgdGhhdCB0aGUgUmVhZCBDeWNsZSBiaXQgaXMgY2xlYXJlZCBwcmlvciB0byBuZXh0IHJlYWQgY3ljbGUgKi8KKwlyZWdfTUlJX01HTVRfQ09NTUFORChiYXNlKSA9IDA7CisKKwkvKiBzdGFydCB0aGUgcmVhZCAqLworCXJlZ19NSUlfTUdNVF9DT01NQU5EKGJhc2UpID0gTUlJX01HTVRfQ09NTUFORF9SRUFEX0NZQ0xFOworCisJLyogd2FpdCBmb3IgdGhlIHJlYWQgdG8gY29tcGxldGUgKi8KKwlwaHlfd2FpdCAoYmFzZSwKKwkJIE1JSV9NR01UX0lORElDQVRPUlNfTk9UX1ZBTElEIHwgTUlJX01HTVRfSU5ESUNBVE9SU19CVVNZKTsKKworCXZhbHVlID0gcmVnX01JSV9NR01UX1NUQVRVUyhiYXNlKTsKKworCXJlZ19NSUlfTUdNVF9DT01NQU5EKGJhc2UpID0gMDsKKworCXJldHVybiB2YWx1ZTsKK30KKworLyoKKyAqIHdyaXRlIHBoeSByZWdpc3RlcgorICovCitzdGF0aWMgdm9pZCB3cml0ZV9waHkgKHVuc2lnbmVkIGludCBiYXNlLAorCQkgICAgICB1bnNpZ25lZCBpbnQgcGh5X2FkZHIsCisJCSAgICAgIHVuc2lnbmVkIGludCBwaHlfcmVnLCB1bnNpZ25lZCBpbnQgcGh5X2RhdGEpCit7CisJcGh5X3dhaXQgKGJhc2UsIE1JSV9NR01UX0lORElDQVRPUlNfQlVTWSk7CisKKwlyZWdfTUlJX01HTVRfQUREUkVTUyhiYXNlKSA9IChwaHlfYWRkciA8PCA4KSB8IHBoeV9yZWc7CisKKwkvKiBFbnN1cmUgdGhhdCB0aGUgUmVhZCBDeWNsZSBiaXQgaXMgY2xlYXJlZCBwcmlvciB0byBuZXh0IGN5Y2xlICovCisJcmVnX01JSV9NR01UX0NPTU1BTkQoYmFzZSkgPSAwOworCisJLyogc3RhcnQgdGhlIHdyaXRlICovCisJcmVnX01JSV9NR01UX0NPTlRST0woYmFzZSkgPSBwaHlfZGF0YTsKK30KKworLyoKKyAqIGNvbmZpZ3VyZSB0aGUgbWFydmVsbCA4OGUxMTExIHBoeQorICovCitzdGF0aWMgaW50IG1hcnZlbGxfODhlX3BoeV9jb25maWcgKHN0cnVjdCBldGhfZGV2aWNlICpkZXYsIGludCAqc3BlZWQsCisJCQkJICBpbnQgKmR1cGxleCkKK3sKKwl1bnNpZ25lZCBsb25nIGJhc2U7CisJdW5zaWduZWQgbG9uZyBwaHlfYWRkcjsKKwl1bnNpZ25lZCBpbnQgcGh5X3N0YXR1czsKKwl1bnNpZ25lZCBpbnQgcGh5X3NwZWNfc3RhdHVzOworCWludCB0aW1lb3V0OworCWludCBwaHlfc3BlZWQ7CisJaW50IHBoeV9kdXBsZXg7CisJdW5zaWduZWQgaW50IHZhbHVlOworCisJcGh5X3NwZWVkID0gTElOS19TUEVFRF9VTktOT1dOOworCXBoeV9kdXBsZXggPSBMSU5LX0RVUExFWF9VTktOT1dOOworCisJYmFzZSA9IGRldi0+aW9iYXNlOworCXBoeV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpZGV2LT5wcml2OworCisJLyogVGFrZSB0aGUgUEhZIG91dCBvZiByZXNldC4gKi8KKwl3cml0ZV9waHkgKEVUSF9CQVNFLCBwaHlfYWRkciwgUEhZX0NUUkxfUkVHLCBQSFlfQ1RSTF9SRVNFVCk7CisKKwkvKiBXYWl0IGZvciB0aGUgcmVzZXQgcHJvY2VzcyB0byBjb21wbGV0ZS4gKi8KKwl1ZGVsYXkgKDEwKTsKKwl0aW1lb3V0ID0gMDsKKwl3aGlsZSAoKHBoeV9zdGF0dXMgPQorCQlyZWFkX3BoeSAoRVRIX0JBU0UsIHBoeV9hZGRyLCBQSFlfQ1RSTF9SRUcpKSAmIFBIWV9DVFJMX1JFU0VUKSB7CisJCXVkZWxheSAoMTApOworCQlpZiAoKyt0aW1lb3V0ID4gMTAwMDApIHsKKwkJCXByaW50ZiAoIkVSUk9SOiB0aW1lb3V0IHdhaXRpbmcgZm9yIHBoeSByZXNldFxuIik7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIFRCSSBDb25maWd1cmF0aW9uLiAqLworCXdyaXRlX3BoeSAoYmFzZSwgVEJJX0FERFIsIFRCSV9DT05UUk9MXzIsIFRCSV9DT05UUk9MXzJfR19NSUlfTU9ERSB8CisJCSAgVEJJX0NPTlRST0xfMl9SRUNFSVZFX0NMT0NLX1NFTEVDVCk7CisJLyogV2FpdCBmb3IgdGhlIGxpbmsgdG8gYmUgZXN0YWJsaXNoZWQuICovCisJdGltZW91dCA9IDA7CisJZG8geworCQl1ZGVsYXkgKDIwMDAwKTsKKwkJcGh5X3N0YXR1cyA9IHJlYWRfcGh5IChFVEhfQkFTRSwgcGh5X2FkZHIsIFBIWV9TVEFUVVNfUkVHKTsKKwkJaWYgKCsrdGltZW91dCA+IDEwMCkgeworCQkJZGVidWdfbGV2KDEsICJFUlJPUjogdW5hYmxlIHRvIGVzdGFibGlzaCBsaW5rISEhXG4iKTsKKwkJCWJyZWFrOworCQl9CisJfSB3aGlsZSAoKHBoeV9zdGF0dXMgJiBQSFlfU1RBVF9MSU5LX1VQKSA9PSAwKTsKKworCWlmICgocGh5X3N0YXR1cyAmIFBIWV9TVEFUX0xJTktfVVApID09IDApCisJCXJldHVybiAwOworCisJdmFsdWUgPSAwOworCXBoeV9zcGVjX3N0YXR1cyA9IHJlYWRfcGh5IChFVEhfQkFTRSwgcGh5X2FkZHIsIE1WMTExMV9TUEVDX1NUQVRfUkVHKTsKKwlpZiAocGh5X3NwZWNfc3RhdHVzICYgU1BFQ19TVEFUX1JFU09MVkVEKSB7CisJCXN3aXRjaCAocGh5X3NwZWNfc3RhdHVzICYgU1BFQ19TVEFUX1NQRUVEX01BU0spIHsKKwkJY2FzZSBTUEVFRF8xMDAwOgorCQkJcGh5X3NwZWVkID0gTElOS19TUEVFRF8xMDAwOworCQkJdmFsdWUgfD0gUEhZX0NUUkxfU1BFRUQxOworCQkJYnJlYWs7CisJCWNhc2UgU1BFRURfMTAwOgorCQkJcGh5X3NwZWVkID0gTElOS19TUEVFRF8xMDA7CisJCQl2YWx1ZSB8PSBQSFlfQ1RSTF9TUEVFRDA7CisJCQlicmVhazsKKwkJY2FzZSBTUEVFRF8xMDoKKwkJCXBoeV9zcGVlZCA9IExJTktfU1BFRURfMTA7CisJCQlicmVhazsKKwkJfQorCQlpZiAocGh5X3NwZWNfc3RhdHVzICYgU1BFQ19TVEFUX0ZVTExfRFVQKSB7CisJCQlwaHlfZHVwbGV4ID0gTElOS19EVVBMRVhfRlVMTDsKKwkJCXZhbHVlIHw9IFBIWV9DVFJMX0ZVTExfRFVQTEVYOworCQl9IGVsc2UKKwkJCXBoeV9kdXBsZXggPSBMSU5LX0RVUExFWF9IQUxGOworCX0KKwkvKiBzZXQgVEJJIHNwZWVkICovCisJd3JpdGVfcGh5IChiYXNlLCBUQklfQUREUiwgUEhZX0NUUkxfUkVHLCB2YWx1ZSk7CisJd3JpdGVfcGh5IChiYXNlLCBUQklfQUREUiwgUEhZX0FOX0FEVl9SRUcsIDB4MDA2MCk7CisKKyNpZiBUU0kxMDhfRVRIX0RFQlVHID4gMAorCXByaW50ZiAoIiVzIGxpbmsgaXMgdXAiLCBkZXYtPm5hbWUpOworCXBoeV9zcGVjX3N0YXR1cyA9IHJlYWRfcGh5IChFVEhfQkFTRSwgcGh5X2FkZHIsIE1WMTExMV9TUEVDX1NUQVRfUkVHKTsKKwlpZiAocGh5X3NwZWNfc3RhdHVzICYgU1BFQ19TVEFUX1JFU09MVkVEKSB7CisJCXN3aXRjaCAocGh5X3NwZWVkKSB7CisJCWNhc2UgTElOS19TUEVFRF8xMDAwOgorCQkJcHJpbnRmICgiLCAxMDAwIE1icHMiKTsKKwkJCWJyZWFrOworCQljYXNlIExJTktfU1BFRURfMTAwOgorCQkJcHJpbnRmICgiLCAxMDAgTWJwcyIpOworCQkJYnJlYWs7CisJCWNhc2UgTElOS19TUEVFRF8xMDoKKwkJCXByaW50ZiAoIiwgMTAgTWJwcyIpOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHBoeV9kdXBsZXggPT0gTElOS19EVVBMRVhfRlVMTCkKKwkJCXByaW50ZiAoIiwgRnVsbCBkdXBsZXgiKTsKKwkJZWxzZQorCQkJcHJpbnRmICgiLCBIYWxmIGR1cGxleCIpOworCX0KKwlwcmludGYgKCJcbiIpOworI2VuZGlmCisKKwlkdW1wX3BoeV9yZWdzIChUQklfQUREUik7CisJaWYgKHNwZWVkKQorCQkqc3BlZWQgPSBwaHlfc3BlZWQ7CisJaWYgKGR1cGxleCkKKwkJKmR1cGxleCA9IHBoeV9kdXBsZXg7CisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIEV4dGVybmFsIGludGVyZmFjZQorICoKKyAqIHJlZ2lzdGVyIHRoZSB0c2kxMDggZXRoZXJuZXQgY29udHJvbGxlcnMgd2l0aCB0aGUgbXVsdGktZXRoZXJuZXQgc3lzdGVtCisgKi8KK2ludCB0c2kxMDhfZXRoX2luaXRpYWxpemUgKGJkX3QgKiBiaXMpCit7CisJc3RydWN0IGV0aF9kZXZpY2UgKmRldjsKKwlpbnQgaW5kZXg7CisKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBDT05GSUdfVFNJMTA4X0VUSF9OVU1fUE9SVFM7IGluZGV4KyspIHsKKwkJZGV2ID0gKHN0cnVjdCBldGhfZGV2aWNlICopbWFsbG9jKHNpemVvZihzdHJ1Y3QgZXRoX2RldmljZSkpOworCisJCXNwcmludGYgKGRldi0+bmFtZSwgIlRTSTEwOF9ldGglZCIsIGluZGV4KTsKKworCQlkZXYtPmlvYmFzZSA9IEVUSF9CQVNFICsgKGluZGV4ICogRVRIX1BPUlRfT0ZGU0VUKTsKKwkJZGV2LT5wcml2ID0gKHZvaWQgKikocGh5X2FkZHJlc3NbaW5kZXhdKTsKKwkJZGV2LT5pbml0ID0gdHNpMTA4X2V0aF9wcm9iZTsKKwkJZGV2LT5oYWx0ID0gdHNpMTA4X2V0aF9oYWx0OworCQlkZXYtPnNlbmQgPSB0c2kxMDhfZXRoX3NlbmQ7CisJCWRldi0+cmVjdiA9IHRzaTEwOF9ldGhfcmVjdjsKKworCQlldGhfcmVnaXN0ZXIoZGV2KTsKKwl9CisJcmV0dXJuIGluZGV4OworfQorCisvKgorICogcHJvYmUgZm9yIGFuZCBpbml0aWFsaXplIGEgc2luZ2xlIGV0aGVybmV0IGludGVyZmFjZQorICovCitzdGF0aWMgaW50IHRzaTEwOF9ldGhfcHJvYmUgKHN0cnVjdCBldGhfZGV2aWNlICpkZXYsIGJkX3QgKiBiaXMpCit7CisJdW5zaWduZWQgbG9uZyBiYXNlOworCXVuc2lnbmVkIGxvbmcgdmFsdWU7CisJaW50IGluZGV4OworCXN0cnVjdCBkbWFfZGVzY3JpcHRvciAqdHhfZGVzY3I7CisJc3RydWN0IGRtYV9kZXNjcmlwdG9yICpyeF9kZXNjcjsKKwlpbnQgc3BlZWQ7CisJaW50IGR1cGxleDsKKworCWJhc2UgPSBkZXYtPmlvYmFzZTsKKworCXJlZ19QT1JUX0NPTlRST0woYmFzZSkgPSBQT1JUX0NPTlRST0xfU1RFIHwgUE9SVF9DT05UUk9MX0JQVDsKKworCS8qIEJyaW5nIERNQS9GSUZPIG91dCBvZiByZXNldC4gKi8KKwlyZWdfVFhfQ09ORklHKGJhc2UpID0gMHgwMDAwMDAwMDsKKwlyZWdfUlhfQ09ORklHKGJhc2UpID0gMHgwMDAwMDAwMDsKKworCXJlZ19UWF9USFJFU0hPTERTKGJhc2UpID0gKDE5MiA8PCAxNikgfCAxOTI7CisJcmVnX1JYX1RIUkVTSE9MRFMoYmFzZSkgPSAoMTkyIDw8IDE2KSB8IDExMjsKKworCS8qIEJyaW5nIE1BQyBvdXQgb2YgcmVzZXQuICovCisJcmVnX01BQ19DT05GSUdfMShiYXNlKSA9IDB4MDAwMDAwMDA7CisKKwkvKiBETUEgTUFDIGNvbmZpZ3VyYXRpb24uICovCisJcmVnX01BQ19DT05GSUdfMShiYXNlKSA9CisJICAgIE1BQ19DT05GSUdfMV9SWF9FTkFCTEUgfCBNQUNfQ09ORklHXzFfVFhfRU5BQkxFOworCisJcmVnX01JSV9NR01UX0NPTkZJRyhiYXNlKSA9IE1JSV9NR01UX0NPTkZJR19OT19QUkVBTUJMRTsKKwlyZWdfTUFYSU1VTV9GUkFNRV9MRU5HVEgoYmFzZSkgPSBSWF9CVUZGRVJfU0laRTsKKworCS8qIE5vdGU6IEVhcmx5IHRzaTEwOCBtYW51YWwgZGlkIG5vdCBoYXZlIGNvcnJlY3QgYnl0ZSBvcmRlcgorCSAqIGZvciB0aGUgc3RhdGlvbiBhZGRyZXNzLiovCisJcmVnX1NUQVRJT05fQUREUkVTU18xKGJhc2UpID0gKGRldi0+ZW5ldGFkZHJbNV0gPDwgMjQpIHwKKwkgICAgKGRldi0+ZW5ldGFkZHJbNF0gPDwgMTYpIHwKKwkgICAgKGRldi0+ZW5ldGFkZHJbM10gPDwgOCkgfCAoZGV2LT5lbmV0YWRkclsyXSA8PCAwKTsKKworCXJlZ19TVEFUSU9OX0FERFJFU1NfMihiYXNlKSA9IChkZXYtPmVuZXRhZGRyWzFdIDw8IDI0KSB8CisJICAgIChkZXYtPmVuZXRhZGRyWzBdIDw8IDE2KTsKKworCWlmIChtYXJ2ZWxsXzg4ZV9waHlfY29uZmlnKGRldiwgJnNwZWVkLCAmZHVwbGV4KSA9PSAwKQorCQlyZXR1cm4gMDsKKworCXZhbHVlID0KKwkgICAgTUFDX0NPTkZJR18yX1BSRUFNQkxFX0xFTkdUSCg3KSB8IE1BQ19DT05GSUdfMl9QQURfQ1JDIHwKKwkgICAgTUFDX0NPTkZJR18yX0NSQ19FTkFCTEU7CisJaWYgKHNwZWVkID09IExJTktfU1BFRURfMTAwMCkKKwkJdmFsdWUgfD0gTUFDX0NPTkZJR18yX0lOVEVSRkFDRV9NT0RFKElOVEVSRkFDRV9NT0RFX0JZVEUpOworCWVsc2UgeworCQl2YWx1ZSB8PSBNQUNfQ09ORklHXzJfSU5URVJGQUNFX01PREUoSU5URVJGQUNFX01PREVfTklCQkxFKTsKKwkJcmVnX1BPUlRfQ09OVFJPTChiYXNlKSB8PSBQT1JUX0NPTlRST0xfU1BEOworCX0KKwlpZiAoZHVwbGV4ID09IExJTktfRFVQTEVYX0ZVTEwpIHsKKwkJdmFsdWUgfD0gTUFDX0NPTkZJR18yX0ZVTExfRFVQTEVYOworCQlyZWdfUE9SVF9DT05UUk9MKGJhc2UpICY9IH5QT1JUX0NPTlRST0xfQlBUOworCX0gZWxzZQorCQlyZWdfUE9SVF9DT05UUk9MKGJhc2UpIHw9IFBPUlRfQ09OVFJPTF9CUFQ7CisJcmVnX01BQ19DT05GSUdfMihiYXNlKSA9IHZhbHVlOworCisJcmVnX1JYX0NPTkZJRyhiYXNlKSA9IFJYX0NPTkZJR19TRTsKKwlyZWdfUlhfUVVFVUVfMF9DT05GSUcoYmFzZSkgPSBPQ05fUE9SVF9NRU1PUlk7CisJcmVnX1JYX1FVRVVFXzBfQlVGX0NPTkZJRyhiYXNlKSA9IE9DTl9QT1JUX01FTU9SWTsKKworCS8qIGluaXRpYWxpemUgdGhlIFJYIERNQSBkZXNjcmlwdG9ycyAqLworCXJ4X2Rlc2NyID0gJnJ4X2Rlc2NyX2FycmF5WzBdOworCXJ4X2Rlc2NyX2N1cnJlbnQgPSByeF9kZXNjcjsKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBOVU1fUlhfREVTQzsgaW5kZXgrKykgeworCQkvKiBtYWtlIHN1cmUgdGhlIHJlY2VpdmUgYnVmZmVycyBhcmUgbm90IGluIGNhY2hlICovCisJCWludmFsaWRhdGVfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKU5ldFJ4UGFja2V0c1tpbmRleF0sCisJCQkJCSh1bnNpZ25lZCBsb25nKU5ldFJ4UGFja2V0c1tpbmRleF0gKworCQkJCQlSWF9CVUZGRVJfU0laRSk7CisJCXJ4X2Rlc2NyLT5zdGFydF9hZGRyMCA9CisJCSAgICBjcHVfdG9fbGUzMigodnVpbnQzMikgTmV0UnhQYWNrZXRzW2luZGV4XSk7CisJCXJ4X2Rlc2NyLT5zdGFydF9hZGRyMSA9IDA7CisJCXJ4X2Rlc2NyLT5uZXh0X2Rlc2NyX2FkZHIwID0KKwkJICAgIGNwdV90b19sZTMyKCh2dWludDMyKSAocnhfZGVzY3IgKyAxKSk7CisJCXJ4X2Rlc2NyLT5uZXh0X2Rlc2NyX2FkZHIxID0gMDsKKwkJcnhfZGVzY3ItPnZsYW5fYnl0ZV9jb3VudCA9IDA7CisJCXJ4X2Rlc2NyLT5jb25maWdfc3RhdHVzID0gY3B1X3RvX2xlMzIoKFJYX0JVRkZFUl9TSVpFIDw8IDE2KSB8CisJCQkJCQkgICAgICBETUFfREVTQ1JfUlhfT1dORVIpOworCQlyeF9kZXNjcisrOworCX0KKwlyeF9kZXNjci0tOworCXJ4X2Rlc2NyLT5uZXh0X2Rlc2NyX2FkZHIwID0gMDsKKwlyeF9kZXNjci0+bmV4dF9kZXNjcl9hZGRyMSA9IGNwdV90b19sZTMyKERNQV9ERVNDUl9MQVNUKTsKKwkvKiBQdXNoIHRoZSBkZXNjcmlwdG9ycyB0byBSQU0gc28gdGhlIGV0aGVybmV0IERNQSBjYW4gc2VlIHRoZW0gKi8KKwlpbnZhbGlkYXRlX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylyeF9kZXNjcl9hcnJheSwKKwkJCQkodW5zaWduZWQgbG9uZylyeF9kZXNjcl9hcnJheSArCisJCQkJc2l6ZW9mKHJ4X2Rlc2NyX2FycmF5KSk7CisKKwkvKiBlbmFibGUgUlggcXVldWUgKi8KKwlyZWdfUlhfQ09OVFJPTChiYXNlKSA9IFRYX0NPTlRST0xfR08gfCAweDAxOworCXJlZ19SWF9RVUVVRV8wX1BUUl9MT1coYmFzZSkgPSAodTMyKSByeF9kZXNjcl9jdXJyZW50OworCS8qIGVuYWJsZSByZWNlaXZlIERNQSAqLworCXJlZ19SWF9RVUVVRV8wX1BUUl9ISUdIKGJhc2UpID0gUlhfUVVFVUVfMF9QVFJfSElHSF9WQUxJRDsKKworCXJlZ19UWF9RVUVVRV8wX0NPTkZJRyhiYXNlKSA9IE9DTl9QT1JUX01FTU9SWTsKKwlyZWdfVFhfUVVFVUVfMF9CVUZfQ09ORklHKGJhc2UpID0gT0NOX1BPUlRfTUVNT1JZOworCisJLyogaW5pdGlhbGl6ZSB0aGUgVFggRE1BIGRlc2NyaXB0b3IgKi8KKwl0eF9kZXNjciA9ICZ0eF9kZXNjcmlwdG9yOworCisJdHhfZGVzY3ItPnN0YXJ0X2FkZHIwID0gMDsKKwl0eF9kZXNjci0+c3RhcnRfYWRkcjEgPSAwOworCXR4X2Rlc2NyLT5uZXh0X2Rlc2NyX2FkZHIwID0gMDsKKwl0eF9kZXNjci0+bmV4dF9kZXNjcl9hZGRyMSA9IGNwdV90b19sZTMyKERNQV9ERVNDUl9MQVNUKTsKKwl0eF9kZXNjci0+dmxhbl9ieXRlX2NvdW50ID0gMDsKKwl0eF9kZXNjci0+Y29uZmlnX3N0YXR1cyA9IGNwdV90b19sZTMyKERNQV9ERVNDUl9UWF9PSyB8CisJCQkJCSAgICAgIERNQV9ERVNDUl9UWF9TT0YgfAorCQkJCQkgICAgICBETUFfREVTQ1JfVFhfRU9GKTsKKwkvKiBlbmFibGUgVFggcXVldWUgKi8KKwlyZWdfVFhfQ09OVFJPTChiYXNlKSA9IFRYX0NPTlRST0xfR08gfCAweDAxOworCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBzZW5kIGEgcGFja2V0CisgKi8KK3N0YXRpYyBpbnQgdHNpMTA4X2V0aF9zZW5kIChzdHJ1Y3QgZXRoX2RldmljZSAqZGV2LAorCQkJICAgdm9sYXRpbGUgdm9pZCAqcGFja2V0LCBpbnQgbGVuZ3RoKQoreworCXVuc2lnbmVkIGxvbmcgYmFzZTsKKwlpbnQgdGltZW91dDsKKwlzdHJ1Y3QgZG1hX2Rlc2NyaXB0b3IgKnR4X2Rlc2NyOworCXVuc2lnbmVkIGxvbmcgc3RhdHVzOworCisJYmFzZSA9IGRldi0+aW9iYXNlOworCXR4X2Rlc2NyID0gJnR4X2Rlc2NyaXB0b3I7CisKKwkvKiBXYWl0IHVudGlsIHRoZSBsYXN0IHBhY2tldCBoYXMgYmVlbiB0cmFuc21pdHRlZC4gKi8KKwl0aW1lb3V0ID0gMDsKKwlkbyB7CisJCS8qIG1ha2Ugc3VyZSB3ZSBzZWUgdGhlIGNoYW5nZXMgbWFkZSBieSB0aGUgRE1BIGVuZ2luZSAqLworCQlpbnZhbGlkYXRlX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZyl0eF9kZXNjciwKKwkJCQkJKHVuc2lnbmVkIGxvbmcpdHhfZGVzY3IgKworCQkJCQlzaXplb2Yoc3RydWN0IGRtYV9kZXNjcmlwdG9yKSk7CisKKwkJaWYgKHRpbWVvdXQgIT0gMCkKKwkJCXVkZWxheSAoMTUpOworCQlpZiAoKyt0aW1lb3V0ID4gMTAwMDApIHsKKwkJCXR4X2RpYWdfcmVncyhiYXNlKTsKKwkJCWRlYnVnX2xldigxLAorCQkJCSAgIkVSUk9SOiB0aW1lb3V0IHdhaXRpbmcgZm9yIGxhc3QgdHJhbnNtaXQgcGFja2V0IHRvIGJlIHNlbnRcbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9IHdoaWxlICh0eF9kZXNjci0+Y29uZmlnX3N0YXR1cyAmIGNwdV90b19sZTMyKERNQV9ERVNDUl9UWF9PV05FUikpOworCisJc3RhdHVzID0gbGUzMl90b19jcHUodHhfZGVzY3ItPmNvbmZpZ19zdGF0dXMpOworCWlmICgoc3RhdHVzICYgRE1BX0RFU0NSX1RYX09LKSA9PSAwKSB7CisjaWZkZWYgVFhfUFJJTlRfRVJST1JTCisJCXByaW50ZiAoIlRYIHBhY2tldCBlcnJvcjogMHglMDh4XG4gICAgJXMlcyVzJXNcbiIsIHN0YXR1cywKKwkJICAgICAgIHN0YXR1cyAmIERNQV9ERVNDUl9UWF9PSyA/ICJ0eCBlcnJvciwgIiA6ICIiLAorCQkgICAgICAgc3RhdHVzICYgRE1BX0RFU0NSX1RYX1JFVFJZX0xJTUlUID8KKwkJICAgICAgICJyZXRyeSBsaW1pdCByZWFjaGVkLCAiIDogIiIsCisJCSAgICAgICBzdGF0dXMgJiBETUFfREVTQ1JfVFhfVU5ERVJSVU4gPyAidW5kZXJydW4sICIgOiAiIiwKKwkJICAgICAgIHN0YXR1cyAmIERNQV9ERVNDUl9UWF9MQVRFX0NPTExJU0lPTiA/ICJsYXRlIGNvbGxpc2lvbiwgIgorCQkgICAgICAgOiAiIik7CisjZW5kaWYKKwl9CisKKwlkZWJ1Z19sZXYgKDksICJzZW5kaW5nIHBhY2tldCAlZFxuIiwgbGVuZ3RoKTsKKwl0eF9kZXNjci0+c3RhcnRfYWRkcjAgPSBjcHVfdG9fbGUzMigodnVpbnQzMikgcGFja2V0KTsKKwl0eF9kZXNjci0+c3RhcnRfYWRkcjEgPSAwOworCXR4X2Rlc2NyLT5uZXh0X2Rlc2NyX2FkZHIwID0gMDsKKwl0eF9kZXNjci0+bmV4dF9kZXNjcl9hZGRyMSA9IGNwdV90b19sZTMyKERNQV9ERVNDUl9MQVNUKTsKKwl0eF9kZXNjci0+dmxhbl9ieXRlX2NvdW50ID0gY3B1X3RvX2xlMzIobGVuZ3RoKTsKKwl0eF9kZXNjci0+Y29uZmlnX3N0YXR1cyA9IGNwdV90b19sZTMyKERNQV9ERVNDUl9UWF9PV05FUiB8CisJCQkJCSAgICAgIERNQV9ERVNDUl9UWF9DUkMgfAorCQkJCQkgICAgICBETUFfREVTQ1JfVFhfUEFEIHwKKwkJCQkJICAgICAgRE1BX0RFU0NSX1RYX1NPRiB8CisJCQkJCSAgICAgIERNQV9ERVNDUl9UWF9FT0YpOworCisJaW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpdHhfZGVzY3IsCisJCQkJKHVuc2lnbmVkIGxvbmcpdHhfZGVzY3IgKworCQkJCXNpemVvZihzdHJ1Y3QgZG1hX2Rlc2NyaXB0b3IpKTsKKworCWludmFsaWRhdGVfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKXBhY2tldCwKKwkJCQkodW5zaWduZWQgbG9uZylwYWNrZXQgKyBsZW5ndGgpOworCisJcmVnX1RYX1FVRVVFXzBfUFRSX0xPVyhiYXNlKSA9ICh1MzIpIHR4X2Rlc2NyOworCXJlZ19UWF9RVUVVRV8wX1BUUl9ISUdIKGJhc2UpID0gVFhfUVVFVUVfMF9QVFJfSElHSF9WQUxJRDsKKworCXJldHVybiBsZW5ndGg7Cit9CisKKy8qCisgKiBDaGVjayBmb3IgcmVjZWl2ZWQgcGFja2V0cyBhbmQgc2VuZCB0aGVtIHVwIHRoZSBwcm90b2NhbCBzdGFjaworICovCitzdGF0aWMgaW50IHRzaTEwOF9ldGhfcmVjdiAoc3RydWN0IGV0aF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZG1hX2Rlc2NyaXB0b3IgKnJ4X2Rlc2NyOworCXVuc2lnbmVkIGxvbmcgYmFzZTsKKwlpbnQgbGVuZ3RoID0gMDsKKwl1bnNpZ25lZCBsb25nIHN0YXR1czsKKwl2b2xhdGlsZSB1Y2hhciAqYnVmZmVyOworCisJYmFzZSA9IGRldi0+aW9iYXNlOworCisJLyogbWFrZSBzdXJlIHdlIHNlZSB0aGUgY2hhbmdlcyBtYWRlIGJ5IHRoZSBETUEgZW5naW5lICovCisJaW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2UgKCh1bnNpZ25lZCBsb25nKXJ4X2Rlc2NyX2FycmF5LAorCQkJCSh1bnNpZ25lZCBsb25nKXJ4X2Rlc2NyX2FycmF5ICsKKwkJCQlzaXplb2YocnhfZGVzY3JfYXJyYXkpKTsKKworCS8qIHByb2Nlc3MgYWxsIG9mIHRoZSByZWNlaXZlZCBwYWNrZXRzICovCisJcnhfZGVzY3IgPSByeF9kZXNjcl9jdXJyZW50OworCXdoaWxlICgocnhfZGVzY3ItPmNvbmZpZ19zdGF0dXMgJiBjcHVfdG9fbGUzMihETUFfREVTQ1JfUlhfT1dORVIpKSA9PSAwKSB7CisJCS8qIGNoZWNrIGZvciBlcnJvciAqLworCQlzdGF0dXMgPSBsZTMyX3RvX2NwdShyeF9kZXNjci0+Y29uZmlnX3N0YXR1cyk7CisJCWlmIChzdGF0dXMgJiBETUFfREVTQ1JfUlhfQkFEX0ZSQU1FKSB7CisjaWZkZWYgUlhfUFJJTlRfRVJST1JTCisJCQlwcmludGYgKCJSWCBwYWNrZXQgZXJyb3I6IDB4JTA4eFxuICAgICVzJXMlcyVzJXMlc1xuIiwKKwkJCSAgICAgICBzdGF0dXMsCisJCQkgICAgICAgc3RhdHVzICYgRE1BX0RFU0NSX1JYX0ZSQU1FX0lTX1RZUEUgPyAidG9vIGJpZywgIgorCQkJICAgICAgIDogIiIsCisJCQkgICAgICAgc3RhdHVzICYgRE1BX0RFU0NSX1JYX1NIT1JUX0ZSQU1FID8gInRvbyBzaG9ydCwgIgorCQkJICAgICAgIDogIiIsCisJCQkgICAgICAgc3RhdHVzICYgRE1BX0RFU0NSX1JYX0JBRF9GUkFNRSA/ICJiYWQgZnJhbWUsICIgOgorCQkJICAgICAgICIiLAorCQkJICAgICAgIHN0YXR1cyAmIERNQV9ERVNDUl9SWF9PVkVSUlVOID8gIm92ZXJydW4sICIgOiAiIiwKKwkJCSAgICAgICBzdGF0dXMgJiBETUFfREVTQ1JfUlhfTUFYX0ZSQU1FX0xFTiA/CisJCQkgICAgICAgIm1heCBsZW5ndGgsICIgOiAiIiwKKwkJCSAgICAgICBzdGF0dXMgJiBETUFfREVTQ1JfUlhfQ1JDX0VSUk9SID8gIkNSQyBlcnJvciwgIiA6CisJCQkgICAgICAgIiIpOworI2VuZGlmCisJCX0gZWxzZSB7CisJCQlsZW5ndGggPQorCQkJICAgIGxlMzJfdG9fY3B1KHJ4X2Rlc2NyLT52bGFuX2J5dGVfY291bnQpICYgMHhGRkZGOworCisJCQkvKioqIHByb2Nlc3MgcGFja2V0ICoqKi8KKwkJCWJ1ZmZlciA9CisJCQkgICAgKHZvbGF0aWxlIHVjaGFyCisJCQkgICAgICopKGxlMzJfdG9fY3B1IChyeF9kZXNjci0+c3RhcnRfYWRkcjApKTsKKwkJCU5ldFJlY2VpdmUgKGJ1ZmZlciwgbGVuZ3RoKTsKKworCQkJaW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2UgKCh1bnNpZ25lZCBsb25nKWJ1ZmZlciwKKwkJCQkJCSh1bnNpZ25lZCBsb25nKWJ1ZmZlciArCisJCQkJCQlSWF9CVUZGRVJfU0laRSk7CisJCX0KKwkJLyogR2l2ZSB0aGlzIGJ1ZmZlciBiYWNrIHRvIHRoZSBETUEgZW5naW5lICovCisJCXJ4X2Rlc2NyLT52bGFuX2J5dGVfY291bnQgPSAwOworCQlyeF9kZXNjci0+Y29uZmlnX3N0YXR1cyA9IGNwdV90b19sZTMyICgoUlhfQlVGRkVSX1NJWkUgPDwgMTYpIHwKKwkJCQkJCSAgICAgIERNQV9ERVNDUl9SWF9PV05FUik7CisJCS8qIG1vdmUgZGVzY3JpcHRvciBwb2ludGVyIGZvcndhcmQgKi8KKwkJcnhfZGVzY3IgPQorCQkgICAgKHN0cnVjdCBkbWFfZGVzY3JpcHRvcgorCQkgICAgICopKGxlMzJfdG9fY3B1IChyeF9kZXNjci0+bmV4dF9kZXNjcl9hZGRyMCkpOworCQlpZiAocnhfZGVzY3IgPT0gMCkKKwkJCXJ4X2Rlc2NyID0gJnJ4X2Rlc2NyX2FycmF5WzBdOworCX0KKwkvKiByZW1lbWJlciB3aGVyZSB3ZSBhcmUgZm9yIG5leHQgdGltZSAqLworCXJ4X2Rlc2NyX2N1cnJlbnQgPSByeF9kZXNjcjsKKworCS8qIElmIHRoZSBETUEgZW5naW5lIGhhcyByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIHF1ZXVlCisJICogc3RhcnQgb3ZlciBhdCB0aGUgYmVnaW5pbmcgKi8KKwlpZiAocmVnX1JYX0VYVEVOREVEX1NUQVRVUyhiYXNlKSAmIFJYX0VYVEVOREVEX1NUQVRVU19FT1FfMCkgeworCisJCXJlZ19SWF9FWFRFTkRFRF9TVEFUVVMoYmFzZSkgPSBSWF9FWFRFTkRFRF9TVEFUVVNfRU9RXzA7CisJCXJlZ19SWF9RVUVVRV8wX1BUUl9MT1coYmFzZSkgPSAodTMyKSAmIHJ4X2Rlc2NyX2FycmF5WzBdOworCQlyZWdfUlhfUVVFVUVfMF9QVFJfSElHSChiYXNlKSA9IFJYX1FVRVVFXzBfUFRSX0hJR0hfVkFMSUQ7CisJfQorCisJcmV0dXJuIGxlbmd0aDsKK30KKworLyoKKyAqIGRpc2FibGUgYW4gZXRoZXJuZXQgaW50ZXJmYWNlCisgKi8KK3N0YXRpYyB2b2lkIHRzaTEwOF9ldGhfaGFsdCAoc3RydWN0IGV0aF9kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGJhc2U7CisKKwliYXNlID0gZGV2LT5pb2Jhc2U7CisKKwkvKiBQdXQgRE1BL0ZJRk8gaW50byByZXNldCBzdGF0ZS4gKi8KKwlyZWdfVFhfQ09ORklHKGJhc2UpID0gVFhfQ09ORklHX1JTVDsKKwlyZWdfUlhfQ09ORklHKGJhc2UpID0gUlhfQ09ORklHX1JTVDsKKworCS8qIFB1dCBNQUMgaW50byByZXNldCBzdGF0ZS4gKi8KKwlyZWdfTUFDX0NPTkZJR18xKGJhc2UpID0gTUFDX0NPTkZJR18xX1NPRlRfUkVTRVQ7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90c2kxMDhfaTJjLmMgYi9kcml2ZXJzL3RzaTEwOF9pMmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjUyY2I2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy90c2kxMDhfaTJjLmMKQEAgLTAsMCArMSwyODMgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDQgVHVuZHJhIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEF1dGhvcjogQWxleCBCb3VuaW5lCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxjb21tb24uaD4KKworI2lmZGVmIENPTkZJR19UU0kxMDhfSTJDCisjaW5jbHVkZSA8dHNpMTA4Lmg+CisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9JMkMpCisKKyNkZWZpbmUgSTJDX0RFTEFZCTEwMDAwMAorI3VuZGVmICBERUJVR19JMkMKKworI2lmZGVmIERFQlVHX0kyQworI2RlZmluZSBEUFJJTlQoeCkgcHJpbnRmICh4KQorI2Vsc2UKKyNkZWZpbmUgRFBSSU5UKHgpCisjZW5kaWYKKworLyogQWxsIGZ1bmN0aW9ucyBhc3N1bWUgdGhhdCBUc2kxMDggSTJDIGJsb2NrIGlzIHRoZSBvbmx5IG1hc3RlciBvbiB0aGUgYnVzICovCisvKiBJMkMgcmVhZCBoZWxwZXIgZnVuY3Rpb24gKi8KKworc3RhdGljIGludCBpMmNfcmVhZF9ieXRlICgKKwkJdWludCBpMmNfY2hhbiwJLyogSTJDIGNoYW5uZWwgbnVtYmVyOiAwIC0gbWFpbiwgMSAtIFNEQyBTUEQgKi8KKwkJdWNoYXIgY2hpcF9hZGRyLC8qIEkyQyBkZXZpY2UgYWRkcmVzcyBvbiB0aGUgYnVzICovCisJCXVpbnQgYnl0ZV9hZGRyLAkvKiBCeXRlIGFkZHJlc3Mgd2l0aGluIEkyQyBkZXZpY2UgKi8KKwkJdWNoYXIgKiBidWZmZXIJLyogcG9pbnRlciB0byBkYXRhIGJ1ZmZlciAqLworCQkpCit7CisJdTMyIHRlbXA7CisJdTMyIHRvX2NvdW50ID0gSTJDX0RFTEFZOworCXUzMiBvcF9zdGF0dXMgPSBUU0kxMDhfSTJDX1RJTUVPVVRfRVJSOworCXUzMiBjaGFuX29mZnNldCA9IFRTSTEwOF9JMkNfT0ZGU0VUOworCisJRFBSSU5UICgoIkkyQyByZWFkX2J5dGUoKSAlZCAweCUwMnggMHglMDJ4XG4iLAorCQlpMmNfY2hhbiwgY2hpcF9hZGRyLCBieXRlX2FkZHIpKTsKKworCWlmICgwICE9IGkyY19jaGFuKQorCQljaGFuX29mZnNldCA9IFRTSTEwOF9JMkNfU0RSQU1fT0ZGU0VUOworCisJLyogQ2hlY2sgaWYgSTJDIG9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzcyAqLworCXRlbXAgPSAqKHUzMiAqKSAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIGNoYW5fb2Zmc2V0ICsgSTJDX0NOVFJMMik7CisKKwlpZiAoMCA9PSAodGVtcCAmIChJMkNfQ05UUkwyX1JEX1NUQVRVUyB8IEkyQ19DTlRSTDJfV1JfU1RBVFVTIHwKKwkJCSAgSTJDX0NOVFJMMl9TVEFSVCkpKSB7CisJCS8qIFNldCBkZXZpY2UgYWRkcmVzcyBhbmQgb3BlcmF0aW9uIChyZWFkID0gMCkgKi8KKwkJdGVtcCA9IChieXRlX2FkZHIgPDwgMTYpIHwgKChjaGlwX2FkZHIgJiAweDA3KSA8PCA4KSB8CisJCSAgICAoKGNoaXBfYWRkciA+PiAzKSAmIDB4MEYpOworCQkqKHUzMiAqKSAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIGNoYW5fb2Zmc2V0ICsgSTJDX0NOVFJMMSkgPQorCQkgICAgdGVtcDsKKworCQkvKiBJc3N1ZSB0aGUgcmVhZCBjb21tYW5kCisJCSAqIChhdCB0aGlzIG1vbWVudCBhbGwgb3RoZXIgcGFyYW1ldGVycyBhcmUgMAorCQkgKiAoc2l6ZSA9IDEgYnl0ZSwgbGFuZSA9IDApCisJCSAqLworCisJCSoodTMyICopIChDRkdfVFNJMTA4X0NTUl9CQVNFICsgY2hhbl9vZmZzZXQgKyBJMkNfQ05UUkwyKSA9CisJCSAgICAoSTJDX0NOVFJMMl9TVEFSVCk7CisKKwkJLyogV2FpdCB1bnRpbCBvcGVyYXRpb24gY29tcGxldGVkICovCisJCWRvIHsKKwkJCS8qIFJlYWQgSTJDIG9wZXJhdGlvbiBzdGF0dXMgKi8KKwkJCXRlbXAgPSAqKHUzMiAqKSAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIGNoYW5fb2Zmc2V0ICsgSTJDX0NOVFJMMik7CisKKwkJCWlmICgwID09ICh0ZW1wICYgKEkyQ19DTlRSTDJfUkRfU1RBVFVTIHwgSTJDX0NOVFJMMl9TVEFSVCkpKSB7CisJCQkJaWYgKDAgPT0gKHRlbXAgJgorCQkJCSAgICAgKEkyQ19DTlRSTDJfSTJDX0NGR0VSUiB8CisJCQkJICAgICAgSTJDX0NOVFJMMl9JMkNfVE9fRVJSKSkKKwkJCQkgICAgKSB7CisJCQkJCW9wX3N0YXR1cyA9IFRTSTEwOF9JMkNfU1VDQ0VTUzsKKworCQkJCQl0ZW1wID0gKih1MzIgKikgKENGR19UU0kxMDhfQ1NSX0JBU0UgKworCQkJCQkJCSBjaGFuX29mZnNldCArCisJCQkJCQkJIEkyQ19SRF9EQVRBKTsKKworCQkJCQkqYnVmZmVyID0gKHU4KSAodGVtcCAmIDB4RkYpOworCQkJCX0gZWxzZSB7CisJCQkJCS8qIHJlcG9ydCBIVyBlcnJvciAqLworCQkJCQlvcF9zdGF0dXMgPSBUU0kxMDhfSTJDX0lGX0VSUk9SOworCisJCQkJCURQUklOVCAoKCJJMkMgSFcgZXJyb3IgcmVwb3J0ZWQ6IDB4JTAyeFxuIiwgdGVtcCkpOworCQkJCX0KKworCQkJCWJyZWFrOworCQkJfQorCQl9IHdoaWxlICh0b19jb3VudC0tKTsKKwl9IGVsc2UgeworCQlvcF9zdGF0dXMgPSBUU0kxMDhfSTJDX0lGX0JVU1k7CisKKwkJRFBSSU5UICgoIkkyQyBUcmFuc2FjdGlvbiBzdGFydCBmYWlsZWQ6IDB4JTAyeFxuIiwgdGVtcCkpOworCX0KKworCURQUklOVCAoKCJJMkMgcmVhZF9ieXRlKCkgc3RhdHVzOiAweCUwMnhcbiIsIG9wX3N0YXR1cykpOworCXJldHVybiBvcF9zdGF0dXM7Cit9CisKKy8qCisgKiBJMkMgUmVhZCBpbnRlcmZhY2UgYXMgZGVmaW5lZCBpbiAiaW5jbHVkZS9pMmMuaCIgOgorICogICBjaGlwX2FkZHI6IEkyQyBjaGlwIGFkZHJlc3MsIHJhbmdlIDAuLjEyNworICogICAgICAgICAgICAgICAgICAodG8gcmVhZCBmcm9tIFNQRCBjaGFubmVsIEVFUFJPTSB1c2UgKDB4RDAgLi4uIDB4RDcpCisgKiAgICAgICAgICAgICAgTk9URTogVGhlIGJpdCA3IGluIHRoZSBjaGlwX2FkZHIgc2VydmVzIGFzIGEgY2hhbm5lbCBzZWxlY3QuCisgKiAgICAgICAgICAgICAgVGhpcyBoYWNrIGlzIGZvciBlbmFibGluZyAiaXNkcmFtIiBjb21tYW5kIG9uIFRzaTEwOCBib2FyZHMKKyAqICAgICAgICAgICAgICB3aXRob3V0IGNoYW5nZXMgdG8gY29tbW9uIGNvZGUuIFVzZWQgZm9yIEkyQyByZWFkcyBvbmx5LgorICogICBieXRlX2FkZHI6IE1lbW9yeSBvciByZWdpc3RlciBhZGRyZXNzIHdpdGhpbiB0aGUgY2hpcAorICogICBhbGVuOiAgICAgIE51bWJlciBvZiBieXRlcyB0byB1c2UgZm9yIGFkZHIgKHR5cGljYWxseSAxLCAyIGZvciBsYXJnZXIKKyAqICAgICAgICAgICAgICBtZW1vcmllcywgMCBmb3IgcmVnaXN0ZXIgdHlwZSBkZXZpY2VzIHdpdGggb25seSBvbmUKKyAqICAgICAgICAgICAgICByZWdpc3RlcikKKyAqICAgYnVmZmVyOiAgICBQb2ludGVyIHRvIGRlc3RpbmF0aW9uIGJ1ZmZlciBmb3IgZGF0YSB0byBiZSByZWFkCisgKiAgIGxlbjogICAgICAgSG93IG1hbnkgYnl0ZXMgdG8gcmVhZAorICoKKyAqICAgUmV0dXJuczogMCBvbiBzdWNjZXNzLCBub3QgMCBvbiBmYWlsdXJlCisgKi8KKworaW50IGkyY19yZWFkICh1Y2hhciBjaGlwX2FkZHIsIHVpbnQgYnl0ZV9hZGRyLCBpbnQgYWxlbiwKKwkJdWNoYXIgKiBidWZmZXIsIGludCBsZW4pCit7CisJdTMyIG9wX3N0YXR1cyA9IFRTSTEwOF9JMkNfUEFSQU1fRVJSOworCXUzMiBpMmNfaWYgPSAwOworCisJLyogSGFjayB0byBzdXBwb3J0IHNlY29uZCAoU1BEKSBJMkMgY29udHJvbGxlciAoU1BEIEVFUFJPTSByZWFkIG9ubHkpLiovCisJaWYgKDB4RDAgPT0gKGNoaXBfYWRkciAmIH4weDA3KSkgeworCQlpMmNfaWYgPSAxOworCQljaGlwX2FkZHIgJj0gMHg3RjsKKwl9CisJLyogQ2hlY2sgZm9yIHZhbGlkIEkyQyBhZGRyZXNzICovCisJaWYgKGNoaXBfYWRkciA8PSAweDdGICYmIChieXRlX2FkZHIgKyBsZW4pIDw9ICgweDAxIDw8IChhbGVuICogOCkpKSB7CisJCXdoaWxlIChsZW4tLSkgeworCQkJb3Bfc3RhdHVzID0gaTJjX3JlYWRfYnl0ZShpMmNfaWYsIGNoaXBfYWRkciwgYnl0ZV9hZGRyKyssIGJ1ZmZlcisrKTsKKworCQkJaWYgKFRTSTEwOF9JMkNfU1VDQ0VTUyAhPSBvcF9zdGF0dXMpIHsKKwkJCQlEUFJJTlQgKCgiSTJDIHJlYWRfYnl0ZSgpIGZhaWxlZDogMHglMDJ4ICglZCBsZWZ0KVxuIiwgb3Bfc3RhdHVzLCBsZW4pKTsKKworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJRFBSSU5UICgoIkkyQyByZWFkKCkgc3RhdHVzOiAweCUwMnhcbiIsIG9wX3N0YXR1cykpOworCXJldHVybiBvcF9zdGF0dXM7Cit9CisKKy8qIEkyQyB3cml0ZSBoZWxwZXIgZnVuY3Rpb24gKi8KKworc3RhdGljIGludCBpMmNfd3JpdGVfYnl0ZSAodWNoYXIgY2hpcF9hZGRyLC8qIEkyQyBkZXZpY2UgYWRkcmVzcyBvbiB0aGUgYnVzICovCisJCQkgIHVpbnQgYnl0ZV9hZGRyLCAvKiBCeXRlIGFkZHJlc3Mgd2l0aGluIEkyQyBkZXZpY2UgKi8KKwkJCSAgdWNoYXIgKiBidWZmZXIgIC8qICBwb2ludGVyIHRvIGRhdGEgYnVmZmVyICovCisJCQkgICkKK3sKKwl1MzIgdGVtcDsKKwl1MzIgdG9fY291bnQgPSBJMkNfREVMQVk7CisJdTMyIG9wX3N0YXR1cyA9IFRTSTEwOF9JMkNfVElNRU9VVF9FUlI7CisKKwkvKiBDaGVjayBpZiBJMkMgb3BlcmF0aW9uIGlzIGluIHByb2dyZXNzICovCisJdGVtcCA9ICoodTMyICopIChDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X0kyQ19PRkZTRVQgKyBJMkNfQ05UUkwyKTsKKworCWlmICgwID09ICh0ZW1wICYgKEkyQ19DTlRSTDJfUkRfU1RBVFVTIHwgSTJDX0NOVFJMMl9XUl9TVEFUVVMgfCBJMkNfQ05UUkwyX1NUQVJUKSkpIHsKKwkJLyogUGxhY2UgZGF0YSBpbnRvIHRoZSBJMkMgVHggUmVnaXN0ZXIgKi8KKwkJKih1MzIgKikgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfSTJDX09GRlNFVCArCisJCQkgIEkyQ19UWF9EQVRBKSA9ICh1MzIpICogYnVmZmVyOworCisJCS8qIFNldCBkZXZpY2UgYWRkcmVzcyBhbmQgb3BlcmF0aW9uICAqLworCQl0ZW1wID0KKwkJICAgIEkyQ19DTlRSTDFfSTJDV1JJVEUgfCAoYnl0ZV9hZGRyIDw8IDE2KSB8CisJCSAgICAoKGNoaXBfYWRkciAmIDB4MDcpIDw8IDgpIHwgKChjaGlwX2FkZHIgPj4gMykgJiAweDBGKTsKKwkJKih1MzIgKikgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfSTJDX09GRlNFVCArCisJCQkgIEkyQ19DTlRSTDEpID0gdGVtcDsKKworCQkvKiBJc3N1ZSB0aGUgd3JpdGUgY29tbWFuZCAoYXQgdGhpcyBtb21lbnQgYWxsIG90aGVyIHBhcmFtZXRlcnMKKwkJICogYXJlIDAgKHNpemUgPSAxIGJ5dGUsIGxhbmUgPSAwKQorCQkgKi8KKworCQkqKHUzMiAqKSAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9JMkNfT0ZGU0VUICsKKwkJCSAgSTJDX0NOVFJMMikgPSAoSTJDX0NOVFJMMl9TVEFSVCk7CisKKwkJb3Bfc3RhdHVzID0gVFNJMTA4X0kyQ19USU1FT1VUX0VSUjsKKworCQkvKiBXYWl0IHVudGlsIG9wZXJhdGlvbiBjb21wbGV0ZWQgKi8KKwkJZG8geworCQkJLyogUmVhZCBJMkMgb3BlcmF0aW9uIHN0YXR1cyAqLworCQkJdGVtcCA9ICoodTMyICopIChDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X0kyQ19PRkZTRVQgKyBJMkNfQ05UUkwyKTsKKworCQkJaWYgKDAgPT0gKHRlbXAgJiAoSTJDX0NOVFJMMl9XUl9TVEFUVVMgfCBJMkNfQ05UUkwyX1NUQVJUKSkpIHsKKwkJCQlpZiAoMCA9PSAodGVtcCAmCisJCQkJICAgICAoSTJDX0NOVFJMMl9JMkNfQ0ZHRVJSIHwKKwkJCQkgICAgICBJMkNfQ05UUkwyX0kyQ19UT19FUlIpKSkgeworCQkJCQlvcF9zdGF0dXMgPSBUU0kxMDhfSTJDX1NVQ0NFU1M7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogcmVwb3J0IGRldGVjdGVkIEhXIGVycm9yICovCisJCQkJCW9wX3N0YXR1cyA9IFRTSTEwOF9JMkNfSUZfRVJST1I7CisKKwkJCQkJRFBSSU5UICgoIkkyQyBIVyBlcnJvciByZXBvcnRlZDogMHglMDJ4XG4iLCB0ZW1wKSk7CisJCQkJfQorCisJCQkJYnJlYWs7CisJCQl9CisKKwkJfSB3aGlsZSAodG9fY291bnQtLSk7CisJfSBlbHNlIHsKKwkJb3Bfc3RhdHVzID0gVFNJMTA4X0kyQ19JRl9CVVNZOworCisJCURQUklOVCAoKCJJMkMgVHJhbnNhY3Rpb24gc3RhcnQgZmFpbGVkOiAweCUwMnhcbiIsIHRlbXApKTsKKwl9CisKKwlyZXR1cm4gb3Bfc3RhdHVzOworfQorCisvKgorICogSTJDIFdyaXRlIGludGVyZmFjZSBhcyBkZWZpbmVkIGluICJpbmNsdWRlL2kyYy5oIiA6CisgKiAgIGNoaXBfYWRkcjogSTJDIGNoaXAgYWRkcmVzcywgcmFuZ2UgMC4uMTI3CisgKiAgIGJ5dGVfYWRkcjogTWVtb3J5IG9yIHJlZ2lzdGVyIGFkZHJlc3Mgd2l0aGluIHRoZSBjaGlwCisgKiAgIGFsZW46ICAgICAgTnVtYmVyIG9mIGJ5dGVzIHRvIHVzZSBmb3IgYWRkciAodHlwaWNhbGx5IDEsIDIgZm9yIGxhcmdlcgorICogICAgICAgICAgICAgIG1lbW9yaWVzLCAwIGZvciByZWdpc3RlciB0eXBlIGRldmljZXMgd2l0aCBvbmx5IG9uZQorICogICAgICAgICAgICAgIHJlZ2lzdGVyKQorICogICBidWZmZXI6ICAgIFBvaW50ZXIgdG8gZGF0YSB0byBiZSB3cml0dGVuCisgKiAgIGxlbjogICAgICAgSG93IG1hbnkgYnl0ZXMgdG8gd3JpdGUKKyAqCisgKiAgIFJldHVybnM6IDAgb24gc3VjY2Vzcywgbm90IDAgb24gZmFpbHVyZQorICovCisKK2ludCBpMmNfd3JpdGUgKHVjaGFyIGNoaXBfYWRkciwgdWludCBieXRlX2FkZHIsIGludCBhbGVuLCB1Y2hhciAqIGJ1ZmZlciwKKwkgICAgICBpbnQgbGVuKQoreworCXUzMiBvcF9zdGF0dXMgPSBUU0kxMDhfSTJDX1BBUkFNX0VSUjsKKworCS8qIENoZWNrIGZvciB2YWxpZCBJMkMgYWRkcmVzcyAqLworCWlmIChjaGlwX2FkZHIgPD0gMHg3RiAmJiAoYnl0ZV9hZGRyICsgbGVuKSA8PSAoMHgwMSA8PCAoYWxlbiAqIDgpKSkgeworCQl3aGlsZSAobGVuLS0pIHsKKwkJCW9wX3N0YXR1cyA9CisJCQkgICAgaTJjX3dyaXRlX2J5dGUgKGNoaXBfYWRkciwgYnl0ZV9hZGRyKyssIGJ1ZmZlcisrKTsKKworCQkJaWYgKFRTSTEwOF9JMkNfU1VDQ0VTUyAhPSBvcF9zdGF0dXMpIHsKKwkJCQlEUFJJTlQgKCgiSTJDIHdyaXRlX2J5dGUoKSBmYWlsZWQ6IDB4JTAyeCAoJWQgbGVmdClcbiIsIG9wX3N0YXR1cywgbGVuKSk7CisKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBvcF9zdGF0dXM7Cit9CisKKy8qCisgKiBJMkMgaW50ZXJmYWNlIGZ1bmN0aW9uIGFzIGRlZmluZWQgaW4gImluY2x1ZGUvaTJjLmgiLgorICogUHJvYmUgdGhlIGdpdmVuIEkyQyBjaGlwIGFkZHJlc3MgYnkgcmVhZGluZyBzaW5nbGUgYnl0ZSBmcm9tIG9mZnNldCAwLgorICogUmV0dXJucyAwIGlmIGEgY2hpcCByZXNwb25kZWQsIG5vdCAwIG9uIGZhaWx1cmUuCisgKi8KKworaW50IGkyY19wcm9iZSAodWNoYXIgY2hpcCkKK3sKKwl1MzIgdG1wOworCisJLyoKKwkgKiBUcnkgdG8gcmVhZCB0aGUgZmlyc3QgbG9jYXRpb24gb2YgdGhlIGNoaXAuCisJICogVGhlIFRzaTEwOCBIVyBkb2Vzbid0IHN1cHBvcnQgc2VuZGluZyBqdXN0IHRoZSBjaGlwIGFkZHJlc3MKKwkgKiBhbmQgY2hlY2tvbmcgZm9yIGFuIDxBQ0s+IGJhY2suCisJICovCisJcmV0dXJuIGkyY19yZWFkIChjaGlwLCAwLCAxLCAoY2hhciAqKSZ0bXAsIDEpOworfQorCisjZW5kaWYJLyogKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfSTJDKSAqLworI2VuZGlmIC8qIENPTkZJR19UU0kxMDhfSTJDICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RzaTEwOF9wY2kuYyBiL2RyaXZlcnMvdHNpMTA4X3BjaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNjA2ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3RzaTEwOF9wY2kuYwpAQCAtMCwwICsxLDE3OCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNCBUdW5kcmEgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxleCBCb3VuaW5lIDxhbGV4YW5kcmViQHR1bmRyYS5jb20+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworLyoKKyAqIFBDSSBpbml0aWFsaXNhdGlvbiBmb3IgdGhlIFRzaTEwOCBFTVUgYm9hcmQuCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaWZkZWYgQ09ORklHX1RTSTEwOF9QQ0kKKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPHBjaS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPHRzaTEwOC5oPgorCitzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgbG9jYWxfaG9zZTsKKwordm9pZCB0c2kxMDhfY2xlYXJfcGNpX2Vycm9yICh2b2lkKQoreworCXUzMiBlcnJfc3RhdCwgZXJyX2FkZHIsIHBjaV9zdGF0OworCisJLyoKKwkgKiBRdWlldGx5IGNsZWFyIGVycm9ycyBzaWduYWxsZWQgYXMgcmVzdWx0IG9mIFBDSS9YIGNvbmZpZ3VyYXRpb24gcmVhZAorCSAqIHJlcXVlc3RzLgorCSAqLworCS8qIFJlYWQgUEIgRXJyb3IgTG9nIFJlZ2lzdGVycyAqLworCWVycl9zdGF0ID0gKih2b2xhdGlsZSB1MzIgKikoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArCisJCQkJICAgICBUU0kxMDhfUEJfUkVHX09GRlNFVCArIFBCX0VSUkNTKTsKKwllcnJfYWRkciA9ICoodm9sYXRpbGUgdTMyICopKENGR19UU0kxMDhfQ1NSX0JBU0UgKworCQkJCSAgICAgVFNJMTA4X1BCX1JFR19PRkZTRVQgKyBQQl9BRVJSKTsKKwlpZiAoZXJyX3N0YXQgJiBQQl9FUlJDU19FUykgeworCQkvKiBDbGVhciBQQ0kvWCBidXMgZXJyb3JzIGlmIGFwcGxpY2FibGUgKi8KKwkJaWYgKChlcnJfYWRkciAmIDB4RkYwMDAwMDApID09IENGR19QQ0lfQ0ZHX0JBU0UpIHsKKwkJCS8qIENsZWFyIGVycm9yIGZsYWcgKi8KKwkJCSoodTMyICopIChDRkdfVFNJMTA4X0NTUl9CQVNFICsKKwkJCQkgIFRTSTEwOF9QQl9SRUdfT0ZGU0VUICsgUEJfRVJSQ1MpID0KKwkJCSAgICBQQl9FUlJDU19FUzsKKworCQkJLyogQ2xlYXIgcmVhZCBlcnJvciByZXBvcnRlZCBpbiBQQl9JU1IgKi8KKwkJCSoodTMyICopIChDRkdfVFNJMTA4X0NTUl9CQVNFICsKKwkJCQkgIFRTSTEwOF9QQl9SRUdfT0ZGU0VUICsgUEJfSVNSKSA9CisJCQkgICAgUEJfSVNSX1BCU19SRF9FUlI7CisKKwkJLyogQ2xlYXIgZXJyb3JzIHJlcG9ydGVkIGJ5IFBDSSBDU1IgKE5vcm1hbGx5IE1hc3RlciBBYm9ydCkgKi8KKwkJCXBjaV9zdGF0ID0gKih2b2xhdGlsZSB1MzIgKikoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArCisJCQkJCQkgICAgIFRTSTEwOF9QQ0lfUkVHX09GRlNFVCArCisJCQkJCQkgICAgIFBDSV9DU1IpOworCQkJKih2b2xhdGlsZSB1MzIgKikoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArCisJCQkJCSAgVFNJMTA4X1BDSV9SRUdfT0ZGU0VUICsgUENJX0NTUikgPQorCQkJICAgIHBjaV9zdGF0OworCisJCQkqKHZvbGF0aWxlIHUzMiAqKShDRkdfVFNJMTA4X0NTUl9CQVNFICsKKwkJCQkJICBUU0kxMDhfUENJX1JFR19PRkZTRVQgKworCQkJCQkgIFBDSV9JUlBfU1RBVCkgPSBQQ0lfSVJQX1NUQVRfUF9DU1I7CisJCX0KKwl9CisKKwlyZXR1cm47Cit9CisKK3Vuc2lnbmVkIGludCBfX2dldF9wY2lfY29uZmlnX2R3b3JkICh1MzIgYWRkcikKK3sKKwl1bnNpZ25lZCBpbnQgcmV0dmFsOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCIgICAgICAgbHdicnggJTAsMCwlMVxuIgorCQkJICAgICAiMTogICAgIGVpZWlvXG4iCisJCQkgICAgICIyOlxuIgorCQkJICAgICAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgorCQkJICAgICAiMzogICAgIGxpICUwLC0xXG4iCisJCQkgICAgICIgICAgICAgYiAyYlxuIgorCQkJICAgICAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgorCQkJICAgICAiICAgICAgIC5hbGlnbiAyXG4iCisJCQkgICAgICIgICAgICAgLmxvbmcgMWIsM2JcbiIKKwkJCSAgICAgIi50ZXh0IjoiPXIiKHJldHZhbCk6InIiKGFkZHIpKTsKKworCXJldHVybiAocmV0dmFsKTsKK30KKworc3RhdGljIGludCB0c2kxMDhfcmVhZF9jb25maWdfZHdvcmQgKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwKKwkJCQkgICAgcGNpX2Rldl90IGRldiwgaW50IG9mZnNldCwgdTMyICogdmFsdWUpCit7CisJZGV2ICY9IChDRkdfUENJX0NGR19TSVpFIC0gMSk7CisJZGV2IHw9IChDRkdfUENJX0NGR19CQVNFIHwgKG9mZnNldCAmIDB4ZmMpKTsKKwkqdmFsdWUgPSBfX2dldF9wY2lfY29uZmlnX2R3b3JkKGRldik7CisJaWYgKDB4RkZGRkZGRkYgPT0gKnZhbHVlKQorCQl0c2kxMDhfY2xlYXJfcGNpX2Vycm9yICgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRzaTEwOF93cml0ZV9jb25maWdfZHdvcmQgKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwKKwkJCQkgICAgIHBjaV9kZXZfdCBkZXYsIGludCBvZmZzZXQsIHUzMiB2YWx1ZSkKK3sKKwlkZXYgJj0gKENGR19QQ0lfQ0ZHX1NJWkUgLSAxKTsKKwlkZXYgfD0gKENGR19QQ0lfQ0ZHX0JBU0UgfCAob2Zmc2V0ICYgMHhmYykpOworCisJb3V0X2xlMzIgKCh2b2xhdGlsZSB1bnNpZ25lZCAqKWRldiwgdmFsdWUpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcGNpX2luaXRfYm9hcmQgKHZvaWQpCit7CisJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlID0gKHN0cnVjdCBwY2lfY29udHJvbGxlciAqKSZsb2NhbF9ob3NlOworCisJaG9zZS0+Zmlyc3RfYnVzbm8gPSAwOworCWhvc2UtPmxhc3RfYnVzbm8gPSAweGZmOworCisJcGNpX3NldF9yZWdpb24gKGhvc2UtPnJlZ2lvbnMgKyAwLAorCQkgICAgICAgQ0ZHX1BDSV9NRU1PUllfQlVTLAorCQkgICAgICAgQ0ZHX1BDSV9NRU1PUllfUEhZUywKKwkJICAgICAgIENGR19QQ0lfTUVNT1JZX1NJWkUsIFBDSV9SRUdJT05fTUVNIHwgUENJX1JFR0lPTl9NRU1PUlkpOworCisJLyogUENJIG1lbW9yeSBzcGFjZSAqLworCXBjaV9zZXRfcmVnaW9uIChob3NlLT5yZWdpb25zICsgMSwKKwkJICAgICAgIENGR19QQ0lfTUVNX0JVUywKKwkJICAgICAgIENGR19QQ0lfTUVNX1BIWVMsIENGR19QQ0lfTUVNX1NJWkUsIFBDSV9SRUdJT05fTUVNKTsKKworCS8qIFBDSSBJL08gc3BhY2UgKi8KKwlwY2lfc2V0X3JlZ2lvbiAoaG9zZS0+cmVnaW9ucyArIDIsCisJCSAgICAgICBDRkdfUENJX0lPX0JVUywKKwkJICAgICAgIENGR19QQ0lfSU9fUEhZUywgQ0ZHX1BDSV9JT19TSVpFLCBQQ0lfUkVHSU9OX0lPKTsKKworCWhvc2UtPnJlZ2lvbl9jb3VudCA9IDM7CisKKwlwY2lfc2V0X29wcyAoaG9zZSwKKwkJICAgIHBjaV9ob3NlX3JlYWRfY29uZmlnX2J5dGVfdmlhX2R3b3JkLAorCQkgICAgcGNpX2hvc2VfcmVhZF9jb25maWdfd29yZF92aWFfZHdvcmQsCisJCSAgICB0c2kxMDhfcmVhZF9jb25maWdfZHdvcmQsCisJCSAgICBwY2lfaG9zZV93cml0ZV9jb25maWdfYnl0ZV92aWFfZHdvcmQsCisJCSAgICBwY2lfaG9zZV93cml0ZV9jb25maWdfd29yZF92aWFfZHdvcmQsCisJCSAgICB0c2kxMDhfd3JpdGVfY29uZmlnX2R3b3JkKTsKKworCXBjaV9yZWdpc3Rlcl9ob3NlIChob3NlKTsKKworCWhvc2UtPmxhc3RfYnVzbm8gPSBwY2lfaG9zZV9zY2FuIChob3NlKTsKKworCWRlYnVnICgiRG9uZSBQQ0kgaW5pdGlhbGl6YXRpb25cbiIpOworCXJldHVybjsKK30KKworI2lmZGVmIENPTkZJR19PRl9GTEFUX1RSRUUKK3ZvaWQKK2Z0X3BjaV9zZXR1cCAodm9pZCAqYmxvYiwgYmRfdCAqYmQpCit7CisJdTMyICpwOworCWludCBsZW47CisKKwlwID0gKHUzMiAqKWZ0X2dldF9wcm9wIChibG9iLCAiLyIgT0ZfVFNJICIvcGNpQDEwMDAvYnVzLXJhbmdlIiwgJmxlbik7CisJaWYgKHAgIT0gTlVMTCkgeworCQlwWzBdID0gbG9jYWxfaG9zZS5maXJzdF9idXNubzsKKwkJcFsxXSA9IGxvY2FsX2hvc2UubGFzdF9idXNubzsKKwl9CisKK30KKyNlbmRpZgorCisjZW5kaWYJLyogQ09ORklHX1RTSTEwOF9QQ0kgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvNzR4eF83eHguaCBiL2luY2x1ZGUvNzR4eF83eHguaAppbmRleCAzM2UzOTZhLi5iYTczYmFlIDEwMDY0NAotLS0gYS9pbmNsdWRlLzc0eHhfN3h4LmgKKysrIGIvaW5jbHVkZS83NHh4Xzd4eC5oCkBAIC0xMTEsNyArMTExLDcgQEAKIAlDUFVfNzUwQ1gsIENQVV83NTBGWCwgQ1BVXzc1MEdYLAogCUNQVV83NDAwLAogCUNQVV83NDEwLAotCUNQVV83NDQ4LAorCUNQVV83NDQ3QSwgQ1BVXzc0NDgsCiAJQ1BVXzc0NTAsIENQVV83NDU1LCBDUFVfNzQ1NywKIAlDUFVfVU5LTk9XTn0gY3B1X3Q7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9nbG9iYWxfZGF0YS5oIGIvaW5jbHVkZS9hc20tcHBjL2dsb2JhbF9kYXRhLmgKaW5kZXggOGJjNjFiNi4uNWYwZjBiNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL2dsb2JhbF9kYXRhLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL2dsb2JhbF9kYXRhLmgKQEAgLTQ5LDYgKzQ5LDkgQEAKIAl1bnNpZ25lZCBsb25nCXNjY19jbGs7CiAJdW5zaWduZWQgbG9uZwlicmdfY2xrOwogI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfTVBDNzQ0OEhQQzIpCisJdW5zaWduZWQgbG9uZyAgIG1lbV9jbGs7CisjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19NUEM4M1hYKQogCS8qIFRoZXJlIGFyZSBvdGhlciBjbG9ja3MgaW4gdGhlIE1QQzgzWFggKi8KIAl1MzIgY3NiX2NsazsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9tcGM3NDQ4aHBjMi5oIGIvaW5jbHVkZS9jb25maWdzL21wYzc0NDhocGMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQzYTNmNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29uZmlncy9tcGM3NDQ4aHBjMi5oCkBAIC0wLDAgKzEsNDExIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogKEMpIENvcHlyaWdodCAyMDA2CisgKiBBbGV4IEJvdW5pbmUgLCBUdW5kcmEgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogUm95IFphbmcJLCA8dGllLWZlaS56YW5nQGZyZWVzY2FsZS5jb20+IEZyZWVzY2FsZSBDb3JwLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKy8qCisgKiBib2FyZCBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIEZyZWVzY2FsZQorICogTVBDNzQ0OEhQQzIgKEhpZ2gtUGVyZm9ybWFuY2UgQ29tcHV0aW5nIElJKSAoVGFpZ2EpIGJvYXJkCisgKgorICovCisKKyNpZm5kZWYgX19DT05GSUdfSAorI2RlZmluZSBfX0NPTkZJR19ICisKKyN1bmRlZiBERUJVRworCisvKiBCb2FyZCBDb25maWd1cmF0aW9uIERlZmluaXRpb25zICovCisvKiBNUEM3NDQ4SFBDMiAoSGlnaC1QZXJmb3JtYW5jZSBDb21wdXRpbmcgSUkpIChUYWlnYSkgYm9hcmQgKi8KKworI2RlZmluZSBDT05GSUdfTVBDNzQ0OEhQQzIKKworI2RlZmluZSBDT05GSUdfNzR4eAorI2RlZmluZSBDT05GSUdfNzUwRlgJCS8qIHRoaXMgb3B0aW9uIHRvIGVuYWJsZSBpbml0IG9mIGV4dGVuZGVkIEJBVHMgKi8KKyNkZWZpbmUgQ09ORklHX0FMVElWRUMJCS8qIHVuZGVmIHRvIGRpc2FibGUgKi8KKworI2RlZmluZSBDRkdfQk9BUkRfTkFNRQkJIk1QQzc0NDggSFBDIElJIgorI2RlZmluZSBDT05GSUdfSURFTlRfU1RSSU5HCSIgRnJlZXNjYWxlIE1QQzc0NDggSFBDIElJIgorCisjZGVmaW5lIENGR19PQ05fQ0xLCQkxMzMwMDAwMDAJLyogMTMzIE1IeiAqLworI2RlZmluZSBDRkdfQ09ORklHX0JVU19DTEsJMTMzMDAwMDAwCisKKyNkZWZpbmUgQ0ZHX0NMS19TUFJFQUQJCS8qIEVuYWJsZSBTcHJlYWQtU3BlY3RydW0gQ2xvY2sgZ2VuZXJhdGlvbiAqLworCisjdW5kZWYgIENPTkZJR19FQ0MJCS8qIGRpc2FibGUgRUNDIHN1cHBvcnQgKi8KKworLyogQm9hcmQtc3BlY2lmaWMgSW5pdGlhbGl6YXRpb24gRnVuY3Rpb25zIHRvIGJlIGNhbGxlZCAqLworI2RlZmluZSBDRkdfQk9BUkRfQVNNX0lOSVQKKyNkZWZpbmUgQ09ORklHX0JPQVJEX0VBUkxZX0lOSVRfRgorI2RlZmluZSBDT05GSUdfQk9BUkRfRUFSTFlfSU5JVF9SCisjZGVmaW5lIENPTkZJR19NSVNDX0lOSVRfUgorCisjZGVmaW5lIENPTkZJR19IQVNfRVRIMQorCisjZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCisKKy8qCisgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucworICogKGVhc3kgdG8gY2hhbmdlKQorICovCisKKyNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQkxMTUyMDAJLyogY29uc29sZSBiYXVkcmF0ZSA9IDExNTAwMCAqLworCisvKiNkZWZpbmUgQ0ZHX0hVU0hfUEFSU0VSICovCisjdW5kZWYgQ0ZHX0hVU0hfUEFSU0VSCisKKyNkZWZpbmUgQ0ZHX1BST01QVF9IVVNIX1BTMgkiPiAiCisKKy8qIFBhc3Mgb3BlbiBmaXJtd2FyZSBmbGF0IHRyZWUgKi8KKyNkZWZpbmUgQ09ORklHX09GX0ZMQVRfVFJFRQkxCisjZGVmaW5lIENPTkZJR19PRl9CT0FSRF9TRVRVUAkxCisKKy8qIG1heGltdW0gc2l6ZSBvZiB0aGUgZmxhdCB0cmVlICg4SykgKi8KKyNkZWZpbmUgT0ZfRkxBVF9UUkVFX01BWF9TSVpFCTgxOTIKKworI2RlZmluZSBPRl9DUFUJCQkiUG93ZXJQQyw3NDQ4QDAiCisjZGVmaW5lIE9GX1RTSQkJCSJ0c2kxMDhAYzAwMDAwMDAiCisjZGVmaW5lIE9GX1RCQ0xLCQkoYmQtPmJpX2J1c2ZyZXEgLyA4KQorI2RlZmluZSBPRl9TVERPVVRfUEFUSAkJIi90c2kxMDhAYzAwMDAwMDAvc2VyaWFsQDc4MDgiCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGRlZmluZXMgbGV0IHlvdSBzZWxlY3Qgd2hhdCBzZXJpYWwgeW91IHdhbnQgdG8gdXNlCisgKiBmb3IgeW91ciBjb25zb2xlIGRyaXZlci4KKyAqCisgKiB3aGF0IHRvIGRvOgorICogSWYgeW91IGhhdmUgaGFja2VkIGEgc2VyaWFsIGNhYmxlIG9udG8gdGhlIHNlY29uZCBEVUFSVCBjaGFubmVsLAorICogY2hhbmdlIHRoZSBDRkdfRFVBUlQgcG9ydCBmcm9tIDEgdG8gMCBiZWxvdy4KKyAqCisgKi8KKworI2RlZmluZSBDT05GSUdfQ09OU19JTkRFWAkxCisjZGVmaW5lIENGR19OUzE2NTUwCisjZGVmaW5lIENGR19OUzE2NTUwX1NFUklBTAorI2RlZmluZSBDRkdfTlMxNjU1MF9SRUdfU0laRQkxCisjZGVmaW5lIENGR19OUzE2NTUwX0NMSwkJQ0ZHX09DTl9DTEsgKiA4CisKKyNkZWZpbmUgQ0ZHX05TMTY1NTBfQ09NMQkoQ0ZHX1RTSTEwOF9DU1JfUlNUX0JBU0UrMHg3ODA4KQorI2RlZmluZSBDRkdfTlMxNjU1MF9DT00yCShDRkdfVFNJMTA4X0NTUl9SU1RfQkFTRSsweDdDMDgpCisjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRQl7IDk2MDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDExNTIwMCB9CisKKyNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQkzCS8qIGF1dG9ib290IGFmdGVyIDMgc2Vjb25kcyAqLworI2RlZmluZSBDT05GSUdfWkVST19CT09UREVMQVlfQ0hFQ0sKKworI3VuZGVmIENPTkZJR19CT09UQVJHUworLyogI2RlZmluZSBDT05GSUdfUFJFQk9PVCAgImVjaG87ZWNobyBUeXBlIFwicnVuIGZsYXNoX25mc1wiCisgKiB0byBtb3VudCByb290IGZpbGVzeXN0ZW0gb3ZlciBORlM7ZWNobyIgKi8KKworI2lmIChDT05GSUdfQk9PVERFTEFZID49IDApCisjZGVmaW5lIENPTkZJR19CT09UQ09NTUFORAkidGZ0cGJvb3QgMHg0MDAwMDAgekltYWdlLmluaXRyZC5lbGY7XAorIHNldGVudiBib290YXJncyAkKGJvb3RhcmdzKSAkKGJvb3RhcmdzX3Jvb3QpIG5mc3Jvb3Q9JChzZXJ2ZXJpcCk6JChyb290cGF0aCkgXAorIGlwPSQoaXBhZGRyKTokKHNlcnZlcmlwKSQoYm9vdGFyZ3NfZW5kKTsgIGJvb3RtIDB4NDAwMDAwOyAiCisKKyNkZWZpbmUgQ09ORklHX0JPT1RBUkdTICJjb25zb2xlPXR0eVMwLDExNTIwMCIKKyNlbmRpZgorCisjdW5kZWYgQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUworCisjZGVmaW5lIENPTkZJR19TRVJJQUwJIk5vLiAxIgorCisvKiBOZXR3b3JraW5nIENvbmZpZ3VyYXRpb24gKi8KKworI2RlZmluZSBLU0VHMUFERFIoYSkJKGEpCS8qIE5lZWRlZCBieSB0aGUgcnRsODEzOSBkcml2ZXIgKi8KKworI2RlZmluZSBDT05GSUdfVFNJMTA4X0VUSAorI2RlZmluZSBDT05GSUdfVFNJMTA4X0VUSF9OVU1fUE9SVFMJMgorCisjZGVmaW5lIENPTkZJR19ORVRfTVVMVEkKKworI2RlZmluZSBDT05GSUdfQk9PVEZJTEUJCXpJbWFnZS5pbml0cmQuZWxmCisjZGVmaW5lIENPTkZJR19MT0FEQUREUgkJMHg0MDAwMDAKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIENPTkZJR19MT0FEU19FQ0hPCTAJLyogZWNobyBvZmYgZm9yIHNlcmlhbCBkb3dubG9hZCAqLworI2RlZmluZSBDRkdfTE9BRFNfQkFVRF9DSEFOR0UJLyogYWxsb3cgYmF1ZHJhdGUgY2hhbmdlcyAqLworCisjdW5kZWYgQ09ORklHX1dBVENIRE9HCQkvKiB3YXRjaGRvZyBkaXNhYmxlZCAqLworCisjZGVmaW5lIENPTkZJR19CT09UUF9NQVNLCShDT05GSUdfQk9PVFBfREVGQVVMVCB8IFwKKwkJCQlDT05GSUdfQk9PVFBfQk9PVEZJTEVTSVpFKQorCisjZGVmaW5lIENPTkZJR19DT01NQU5EUyAoQ09ORklHX0NNRF9ERkwgXAorCQl8IENGR19DTURfQVNLRU5WIFwKKwkJfCBDRkdfQ01EX0NBQ0hFIFwKKwkJfCBDRkdfQ01EX1BDSSBcCisJCXwgQ0ZHX0NNRF9JMkMgXAorCQl8IENGR19DTURfU0RSQU0gXAorCQl8IENGR19DTURfRUVQUk9NIFwKKwkJfCBDRkdfQ01EX0ZMQVNIIFwKKwkJfCBDRkdfQ01EX0VOViBcCisJCXwgQ0ZHX0NNRF9CU1AgXAorCQl8IENGR19DTURfREhDUCBcCisJCXwgQ0ZHX0NNRF9QSU5HIFwKKwkJfCBDRkdfQ01EX0RBVEUpCisKKy8qIHRoaXMgbXVzdCBiZSBpbmNsdWRlZCBBRlRFUiB0aGUgZGVmaW5pdGlvbiBvZiBDT05GSUdfQ09NTUFORFMgKGlmIGFueSkgKi8KKyNpbmNsdWRlIDxjbWRfY29uZmRlZnMuaD4KKworLypzZXQgZGF0ZSBpbiB1LWJvb3QqLworI2RlZmluZSBDT05GSUdfUlRDX000OFQzNUEKKyNkZWZpbmUgQ0ZHX05WUkFNX0JBU0VfQUREUgkweGZjMDAwMDAwCisjZGVmaW5lIENGR19OVlJBTV9TSVpFCQkweDgwMDAKKy8qCisgKiBNaXNjZWxsYW5lb3VzIGNvbmZpZ3VyYWJsZSBvcHRpb25zCisgKi8KKyNkZWZpbmUgQ09ORklHX1ZFUlNJT05fVkFSSUFCTEUJCTEKKyNkZWZpbmUgQ09ORklHX1RTSTEwOF9JMkMKKworI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9BRERSCQkweDUwCS8qIEkyQyBFRVBST00gcGFnZSAxICovCisjZGVmaW5lIENGR19JMkNfRUVQUk9NX0FERFJfTEVOCQkxCS8qIEJ5dGVzIG9mIGFkZHJlc3MgKi8KKworI2RlZmluZSBDRkdfTE9OR0hFTFAJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5ICovCisjZGVmaW5lIENGR19QUk9NUFQJIj0+ICIJLyogTW9uaXRvciBDb21tYW5kIFByb21wdCAqLworCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfS0dEQikKKyNkZWZpbmUgQ0ZHX0NCU0laRQkJMTAyNAkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZSAqLworI2RlZmluZSBDT05GSUdfS0dEQl9CQVVEUkFURQkxMTUyMDAJLyogc3BlZWQgdG8gcnVuIGtnZGIgc2VyaWFsIHBvcnQgYXQgKi8KKyNlbHNlCisjZGVmaW5lIENGR19DQlNJWkUJCTI1NgkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZSAqLworI2VuZGlmCisKKyNkZWZpbmUgQ0ZHX1BCU0laRSAoQ0ZHX0NCU0laRSArIHNpemVvZihDRkdfUFJPTVBUKSArIDE2KS8qIFByaW50IEJ1ZmZlciBTaXplICovCisjZGVmaW5lIENGR19NQVhBUkdTCTE2CQkvKiBtYXggbnVtYmVyIG9mIGNvbW1hbmQgYXJncyAqLworI2RlZmluZSBDRkdfQkFSR1NJWkUJQ0ZHX0NCU0laRQkvKiBCb290IEFyZ3VtZW50IEJ1ZmZlciBTaXplICovCisKKyNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJMHgwMDQwMDAwMAkvKiBtZW10ZXN0IHdvcmtzIG9uICovCisjZGVmaW5lIENGR19NRU1URVNUX0VORAkJMHgwN2MwMDAwMAkvKiA0IC4uLiAxMjQgTUIgaW4gRFJBTSAqLworCisjZGVmaW5lIENGR19MT0FEX0FERFIJMHgwMDQwMDAwMAkvKiBkZWZhdWx0IGxvYWQgYWRkcmVzcyAqLworCisjZGVmaW5lIENGR19IWgkJMTAwMAkJLyogZGVjciBmcmVxOiAxbXMgdGlja3MgKi8KKworLyoKKyAqIExvdyBMZXZlbCBDb25maWd1cmF0aW9uIFNldHRpbmdzCisgKiAoYWRkcmVzcyBtYXBwaW5ncywgcmVnaXN0ZXIgaW5pdGlhbCB2YWx1ZXMsIGV0Yy4pCisgKiBZb3Ugc2hvdWxkIGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nIGlmIHlvdSBtYWtlIGNoYW5nZXMgaGVyZS4KKyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBEZWZpbml0aW9ucyBmb3IgaW5pdGlhbCBzdGFjayBwb2ludGVyIGFuZCBkYXRhIGFyZWEKKyAqLworCisvKgorICogV2hlbiBsb2NraW5nIGRhdGEgaW4gY2FjaGUgeW91IHNob3VsZCBwb2ludCB0aGUgQ0ZHX0lOSVRfUkFNX0FERFJFU1MKKyAqIFRvIGFuIHVudXNlZCBtZW1vcnkgcmVnaW9uLiBUaGUgc3RhY2sgd2lsbCByZW1haW4gaW4gY2FjaGUgdW50aWwgUkFNCisgKiBpcyBpbml0aWFsaXplZAorICovCisjdW5kZWYgIENGR19JTklUX1JBTV9MT0NLCisjZGVmaW5lIENGR19JTklUX1JBTV9BRERSCTB4MDdkMDAwMDAJLyogdW51c2VkIG1lbW9yeSByZWdpb24gKi8KKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0VORAkweDQwMDAvKiBsYXJnZXIgc3BhY2UgLSB3ZSBoYXZlIFNEUkFNIGluaXRpYWxpemVkICovCisKKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX1NJWkUJMTI4Lyogc2l6ZSBpbiBieXRlcyByZXNlcnZlZCBmb3IgaW5pdCBkYXRhICovCisjZGVmaW5lIENGR19HQkxfREFUQV9PRkZTRVQgKENGR19JTklUX1JBTV9FTkQgLSBDRkdfR0JMX0RBVEFfU0laRSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogU3RhcnQgYWRkcmVzc2VzIGZvciB0aGUgZmluYWwgbWVtb3J5IGNvbmZpZ3VyYXRpb24KKyAqIChTZXQgdXAgYnkgdGhlIHN0YXJ0dXAgY29kZSkKKyAqIFBsZWFzZSBub3RlIHRoYXQgQ0ZHX1NEUkFNX0JBU0UgX211c3RfIHN0YXJ0IGF0IDAKKyAqLworCisjZGVmaW5lIENGR19TRFJBTV9CQVNFCQkweDAwMDAwMDAwCS8qIGZpcnN0IDI1NiBNQiBvZiBTRFJBTSAqLworI2RlZmluZSBDRkdfU0RSQU0xX0JBU0UJCTB4MTAwMDAwMDAJLyogbmV4dCAyNTZNQiBvZiBTRFJBTSAqLworCisjZGVmaW5lIENGR19TRFJBTTJfQkFTRQkweDQwMDAwMDAwCS8qIGJlZ2lubmluZyBvZiBub24tY2FjaGVhYmxlIGFsaWFzIGZvciBTRFJBTSAtIGZpcnN0IDI1Nk1CICovCisjZGVmaW5lIENGR19TRFJBTTNfQkFTRQkweDUwMDAwMDAwCS8qIG5leHQgTm9uLUNhY2hlYWJsZSAyNTZNQiBvZiBTRFJBTSAqLworCisjZGVmaW5lIENGR19QQ0lfUEZNX0JBU0UJMHg4MDAwMDAwMAkvKiBQcmVmZXRjaGFibGUgKGNhY2hlYWJsZSkgUENJL1ggUEZNIGFuZCBTRFJBTSBPQ04gKDEyOE1CKzEyOE1CKSAqLworCisjZGVmaW5lIENGR19QQ0lfTUVNMzJfQkFTRQkweEUwMDAwMDAwCS8qIE5vbi1DYWNoZWFibGUgUENJL1ggTUVNIGFuZCBTRFJBTSBPQ04gKDEyOE1CKzEyOE1CKSAqLworCisjZGVmaW5lIENGR19NSVNDX1JFR0lPTl9CQVNFCTB4ZjAwMDAwMDAJLyogQmFzZSBBZGRyZXNzIGZvciAoUENJL1ggKyBGbGFzaCkgcmVnaW9uICovCisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBU0UJMHhmZjAwMDAwMAkvKiBCYXNlIEFkZHJlc3Mgb2YgRmxhc2ggZGV2aWNlICovCisjZGVmaW5lIENGR19GTEFTSF9CQVNFMgkweGZlMDAwMDAwCS8qIEFsdGVybmF0ZSBGbGFzaCBCYXNlIEFkZHJlc3MgKi8KKworI2RlZmluZSBDT05GSUdfVkVSWV9CSUdfUkFNCS8qIHdlIHdpbGwgdXNlIHVwIHRvIDI1Nk0gbWVtb3J5IGZvciBjYXVzZSB3ZSBhcmUgc2hvcnQgb2YgQkFUUyAqLworCisjZGVmaW5lIFBDSTBfSU9fQkFTRV9CT09UTQkweGZkMDAwMDAwCisKKyNkZWZpbmUgQ0ZHX1JFU0VUX0FERFJFU1MJMHgzZmZmZmYwMAorI2RlZmluZSBDRkdfTU9OSVRPUl9MRU4JCSgyNTYgPDwgMTApCS8qIFJlc2VydmUgMjU2IGtCIGZvciBNb25pdG9yICovCisjZGVmaW5lIENGR19NT05JVE9SX0JBU0UJVEVYVF9CQVNFCS8qIHUtYm9vdCBjb2RlIGJhc2UgKi8KKyNkZWZpbmUgQ0ZHX01BTExPQ19MRU4JCSgyNTYgPDwgMTApCS8qIFJlc2VydmUgMjU2IGtCIGZvciBtYWxsb2MgKi8KKworLyogUGVyaXBoZXJhbCBEZXZpY2Ugc2VjdGlvbiAqLworCisvKgorICogUmVzb3VyY2VzIG9uIHRoZSBUc2kxMDgKKyAqLworCisjZGVmaW5lIENGR19UU0kxMDhfQ1NSX1JTVF9CQVNFCTB4QzAwMDAwMDAJLyogVHNpMTA4IENTUiBiYXNlIGFmdGVyIHJlc2V0ICovCisjZGVmaW5lIENGR19UU0kxMDhfQ1NSX0JBU0UJQ0ZHX1RTSTEwOF9DU1JfUlNUX0JBU0UJLyogUnVudGltZSBUc2kxMDggQ1NSIGJhc2UgKi8KKworI2RlZmluZSBFTkFCTEVfUENJX0NTUl9CQVIJLyogZW5hYmxlcyBhY2Nlc3MgdG8gVHNpMTA4IENTUnMgZnJvbSB0aGUgUENJL1ggYnVzICovCisKKyN1bmRlZiAgRElTQUJMRV9QQk0KKworLyoKKyAqIFBDSSBzdHVmZgorICoKKyAqLworCisjZGVmaW5lIENPTkZJR19QQ0kJCS8qIGluY2x1ZGUgcGNpIHN1cHBvcnQgKi8KKyNkZWZpbmUgQ09ORklHX1RTSTEwOF9QQ0kJLyogaW5jbHVkZSB0c2kxMDggcGNpIHN1cHBvcnQgKi8KKworI2RlZmluZSBQQ0lfSE9TVF9BREFQVEVSCTAJLyogY29uZmlndXJlIGFzIHBjaSBhZGFwdGVyICovCisjZGVmaW5lIFBDSV9IT1NUX0ZPUkNFCQkxCS8qIGNvbmZpZ3VyZSBhcyBwY2kgaG9zdCAqLworI2RlZmluZSBQQ0lfSE9TVF9BVVRPCQkyCS8qIGRldGVjdGVkIHZpYSBhcmJpdGVyIGVuYWJsZSAqLworCisjZGVmaW5lIENPTkZJR19QQ0lfSE9TVCBQQ0lfSE9TVF9GT1JDRQkvKiBzZWxlY3QgcGNpIGhvc3QgZnVuY3Rpb24gKi8KKyNkZWZpbmUgQ09ORklHX1BDSV9QTlAJCS8qIGRvIHBjaSBwbHVnLWFuZC1wbGF5ICovCisKKy8qIFBDSSBNRU1PUlkgTUFQIHNlY3Rpb24gKi8KKworLyogUENJIHZpZXcgb2YgU3lzdGVtIE1lbW9yeSAqLworI2RlZmluZSBDRkdfUENJX01FTU9SWV9CVVMJMHgwMDAwMDAwMAorI2RlZmluZSBDRkdfUENJX01FTU9SWV9QSFlTCTB4MDAwMDAwMDAKKyNkZWZpbmUgQ0ZHX1BDSV9NRU1PUllfU0laRQkweDgwMDAwMDAwCisKKy8qIFBDSSBNZW1vcnkgU3BhY2UgKi8KKyNkZWZpbmUgQ0ZHX1BDSV9NRU1fQlVTCQkoQ0ZHX1BDSV9NRU1fUEhZUykKKyNkZWZpbmUgQ0ZHX1BDSV9NRU1fUEhZUwkoQ0ZHX1BDSV9NRU0zMl9CQVNFKQkvKiAweEUwMDAwMDAwICovCisjZGVmaW5lIENGR19QQ0lfTUVNX1NJWkUJMHgxMDAwMDAwMAkvKiAyNTYgTUIgc3BhY2UgZm9yIFBDSS9YIE1lbSArIFNEUkFNIE9DTiAqLworCisvKiBQQ0kgSS9PIFNwYWNlICovCisjZGVmaW5lIENGR19QQ0lfSU9fQlVTCQkweDAwMDAwMDAwCisjZGVmaW5lIENGR19QQ0lfSU9fUEhZUwkJMHhmYTAwMDAwMAkvKiBDaGFuZ2VkIGZyb20gZmQwMDAwMDAgKi8KKworI2RlZmluZSBDRkdfUENJX0lPX1NJWkUJCTB4MDEwMDAwMDAJLyogMTZNQiAqLworCisjZGVmaW5lIF9JT19CQVNFCQkweDAwMDAwMDAwCS8qIHBvaW50cyB0byBQQ0kgSS9PIHNwYWNlICAgICAgKi8KKworLyogUENJIENvbmZpZyBTcGFjZSBtYXBwaW5nICovCisjZGVmaW5lIENGR19QQ0lfQ0ZHX0JBU0UJMHhmYjAwMDAwMAkvKiBDaGFuZ2VkIGZyb20gRkUwMDAwMDAgKi8KKyNkZWZpbmUgQ0ZHX1BDSV9DRkdfU0laRQkweDAxMDAwMDAwCS8qIDE2TUIgKi8KKworI2RlZmluZSBDRkdfSUJBVDBVCTB4RkUwMDAzRkYKKyNkZWZpbmUgQ0ZHX0lCQVQwTAkweEZFMDAwMDAyCisKKyNkZWZpbmUgQ0ZHX0lCQVQxVQkweDAwMDA3RkZGCisjZGVmaW5lIENGR19JQkFUMUwJMHgwMDAwMDAxMgorCisjZGVmaW5lIENGR19JQkFUMlUJMHg4MDAwN0ZGRgorI2RlZmluZSBDRkdfSUJBVDJMCTB4ODAwMDAwMjIKKworI2RlZmluZSBDRkdfSUJBVDNVCTB4MDAwMDAwMDAKKyNkZWZpbmUgQ0ZHX0lCQVQzTAkweDAwMDAwMDAwCisKKyNkZWZpbmUgQ0ZHX0lCQVQ0VQkweDAwMDAwMDAwCisjZGVmaW5lIENGR19JQkFUNEwJMHgwMDAwMDAwMAorCisjZGVmaW5lIENGR19JQkFUNVUJMHgwMDAwMDAwMAorI2RlZmluZSBDRkdfSUJBVDVMCTB4MDAwMDAwMDAKKworI2RlZmluZSBDRkdfSUJBVDZVCTB4MDAwMDAwMDAKKyNkZWZpbmUgQ0ZHX0lCQVQ2TAkweDAwMDAwMDAwCisKKyNkZWZpbmUgQ0ZHX0lCQVQ3VQkweDAwMDAwMDAwCisjZGVmaW5lIENGR19JQkFUN0wJMHgwMDAwMDAwMAorCisjZGVmaW5lIENGR19EQkFUMFUJMHhFMDAwM0ZGRgorI2RlZmluZSBDRkdfREJBVDBMCTB4RTAwMDAwMkEKKworI2RlZmluZSBDRkdfREJBVDFVCTB4MDAwMDdGRkYKKyNkZWZpbmUgQ0ZHX0RCQVQxTAkweDAwMDAwMDEyCisKKyNkZWZpbmUgQ0ZHX0RCQVQyVQkweDAwMDAwMDAwCisjZGVmaW5lIENGR19EQkFUMkwJMHgwMDAwMDAwMAorCisjZGVmaW5lIENGR19EQkFUM1UJMHhDMDAwMDAwMworI2RlZmluZSBDRkdfREJBVDNMCTB4QzAwMDAwMkEKKworI2RlZmluZSBDRkdfREJBVDRVCTB4MDAwMDAwMDAKKyNkZWZpbmUgQ0ZHX0RCQVQ0TAkweDAwMDAwMDAwCisKKyNkZWZpbmUgQ0ZHX0RCQVQ1VQkweDAwMDAwMDAwCisjZGVmaW5lIENGR19EQkFUNUwJMHgwMDAwMDAwMAorCisjZGVmaW5lIENGR19EQkFUNlUJMHgwMDAwMDAwMAorI2RlZmluZSBDRkdfREJBVDZMCTB4MDAwMDAwMDAKKworI2RlZmluZSBDRkdfREJBVDdVCTB4MDAwMDAwMDAKKyNkZWZpbmUgQ0ZHX0RCQVQ3TAkweDAwMDAwMDAwCisKKy8qIEkyQyBhZGRyZXNzZXMgZm9yIHRoZSB0d28gRElNTSBTUEQgY2hpcHMgKi8KKyNkZWZpbmUgRElNTTBfSTJDX0FERFIJMHg1MQorI2RlZmluZSBESU1NMV9JMkNfQUREUgkweDUyCisKKy8qCisgKiBGb3IgYm9vdGluZyBMaW51eCwgdGhlIGJvYXJkIGluZm8gYW5kIGNvbW1hbmQgbGluZSBkYXRhCisgKiBoYXZlIHRvIGJlIGluIHRoZSBmaXJzdCA4IE1CIG9mIG1lbW9yeSwgc2luY2UgdGhpcyBpcworICogdGhlIG1heGltdW0gbWFwcGVkIGJ5IHRoZSBMaW51eCBrZXJuZWwgZHVyaW5nIGluaXRpYWxpemF0aW9uLgorICovCisjZGVmaW5lIENGR19CT09UTUFQU1oJKDg8PDIwKQkvKiBJbml0aWFsIE1lbW9yeSBtYXAgZm9yIExpbnV4ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEZMQVNIIG9yZ2FuaXphdGlvbgorICovCisjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJMS8qIEZsYXNoIGNhbiBiZSBhdCBvbmUgb2YgdHdvIGFkZHJlc3NlcyAqLworI2RlZmluZSBGTEFTSF9CQU5LX1NJWkUJCTB4MDEwMDAwMDAJLyogMTYgTUIgVG90YWwgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBTktTX0xJU1Qge0NGR19GTEFTSF9CQVNFLCBDRkdfRkxBU0hfQkFTRTJ9CisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSV9EUklWRVIKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSQorI2RlZmluZSBDRkdfV1JJVEVfU1dBUFBFRF9EQVRBCisKKyNkZWZpbmUgUEhZU19GTEFTSF9TSVpFCQkweDAxMDAwMDAwCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkoMTI4KQorCisjZGVmaW5lIENGR19FTlZfSVNfSU5fTlZSQU0KKyNkZWZpbmUgQ0ZHX0VOVl9BRERSCQkweEZDMDAwMDAwCisKKyNkZWZpbmUgQ0ZHX0VOVl9PRkZTRVQJMHgwMDAwMDAwMAkvKiBPZmZzZXQgb2YgRW52aXJvbm1lbnQgU2VjdG9yICovCisjZGVmaW5lIENGR19FTlZfU0laRQkweDAwMDAwNDAwCS8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQgU3BhY2UgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ2FjaGUgQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19DQUNIRUxJTkVfU0laRQkzMgkvKiBGb3IgYWxsIE1QQzc0eHggQ1BVcyAqLworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0tHREIpCisjZGVmaW5lIENGR19DQUNIRUxJTkVfU0hJRlQJNQkvKiBsb2cgYmFzZSAyIG9mIHRoZSBhYm92ZSB2YWx1ZSAqLworI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEwyQ1Igc2V0dXAgLS0gbWFrZSBzdXJlIHRoaXMgaXMgcmlnaHQgZm9yIHlvdXIgYm9hcmQhCisgKiBsb29rIGluIGluY2x1ZGUvbXBjNzR4eC5oIGZvciB0aGUgZGVmaW5lcyB1c2VkIGhlcmUKKyAqLworI3VuZGVmIENGR19MMgorCisjZGVmaW5lIEwyX0lOSVQJCTAKKyNkZWZpbmUgTDJfRU5BQkxFCShMMl9JTklUIHwgTDJDUl9MMkUpCisKKy8qCisgKiBJbnRlcm5hbCBEZWZpbml0aW9ucworICoKKyAqIEJvb3QgRmxhZ3MKKyAqLworI2RlZmluZSBCT09URkxBR19DT0xECTB4MDEJLyogTm9ybWFsIFBvd2VyLU9uOiBCb290IGZyb20gRkxBU0ggKi8KKyNkZWZpbmUgQk9PVEZMQUdfV0FSTQkweDAyCS8qIFNvZnR3YXJlIHJlYm9vdCAqLworI2RlZmluZSBDRkdfU0VSSUFMX0hBTkdfSU5fRVhDRVBUSU9OCisjZW5kaWYJLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90c2kxMDguaCBiL2luY2x1ZGUvdHNpMTA4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE2MmU3YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdHNpMTA4LmgKQEAgLTAsMCArMSwyMjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKEMpIENvcHlyaWdodCAyMDAzOyAgVHVuZHJhIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIChDKSBDb3B5cmlnaHQgMjAwNjsgIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIENvcnAuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBGSUxFTkFNRTogdHNpMTA4LmgKKyAqCisgKiBPcmlnaW5hdG9yOiBBbGV4IEJvdW5pbmUKKyAqCisgKiBERVNDUklQVElPTjoKKyAqIENvbW1vbiBkZWZpbml0aW9ucyBmb3IgdGhlIFR1bmRyYSBUc2kxMDggYnJpZGdlIGNoaXAKKyAqCisgKi8KKworI2lmbmRlZiBfVFNJMTA4X0hfCisjZGVmaW5lIF9UU0kxMDhfSF8KKworI2RlZmluZSBUU0kxMDhfSExQX1JFR19PRkZTRVQJKDB4MDAwMCkKKyNkZWZpbmUgVFNJMTA4X1BDSV9SRUdfT0ZGU0VUCSgweDEwMDApCisjZGVmaW5lIFRTSTEwOF9DTEtfUkVHX09GRlNFVAkoMHgyMDAwKQorI2RlZmluZSBUU0kxMDhfUEJfUkVHX09GRlNFVAkoMHgzMDAwKQorI2RlZmluZSBUU0kxMDhfU0RfUkVHX09GRlNFVAkoMHg0MDAwKQorI2RlZmluZSBUU0kxMDhfTVBJQ19SRUdfT0ZGU0VUCSgweDc0MDApCisKKyNkZWZpbmUgUEJfSUQJCQkoMHgwMDApCisjZGVmaW5lIFBCX1JTUgkJCSgweDAwNCkKKyNkZWZpbmUgUEJfQlVTX01TX1NFTEVDVAkoMHgwMDgpCisjZGVmaW5lIFBCX0lTUgkJCSgweDAwQykKKyNkZWZpbmUgUEJfQVJCX0NUUkwJCSgweDAxOCkKKyNkZWZpbmUgUEJfUFZUX0NUUkwyCQkoMHgwMzQpCisjZGVmaW5lIFBCX1NDUgkJCSgweDQwMCkKKyNkZWZpbmUgUEJfRVJSQ1MJCSgweDQwNCkKKyNkZWZpbmUgUEJfQUVSUgkJCSgweDQwOCkKKyNkZWZpbmUgUEJfUkVHX0JBUgkJKDB4NDEwKQorI2RlZmluZSBQQl9PQ05fQkFSMQkJKDB4NDE0KQorI2RlZmluZSBQQl9PQ05fQkFSMgkJKDB4NDE4KQorI2RlZmluZSBQQl9TRFJBTV9CQVIxCQkoMHg0MUMpCisjZGVmaW5lIFBCX1NEUkFNX0JBUjIJCSgweDQyMCkKKyNkZWZpbmUgUEJfTUNSCQkJKDB4QzAwKQorI2RlZmluZSBQQl9NQ01ECQkJKDB4QzA0KQorCisjZGVmaW5lIEhMUF9CMF9BRERSCQkoMHgwMDApCisjZGVmaW5lIEhMUF9CMV9BRERSCQkoMHgwMTApCisjZGVmaW5lIEhMUF9CMl9BRERSCQkoMHgwMjApCisjZGVmaW5lIEhMUF9CM19BRERSCQkoMHgwMzApCisKKyNkZWZpbmUgSExQX0IwX01BU0sJCSgweDAwNCkKKyNkZWZpbmUgSExQX0IxX01BU0sJCSgweDAxNCkKKyNkZWZpbmUgSExQX0IyX01BU0sJCSgweDAyNCkKKyNkZWZpbmUgSExQX0IzX01BU0sJCSgweDAzNCkKKworI2RlZmluZSBITFBfQjBfQ1RSTDAJCSgweDAwOCkKKyNkZWZpbmUgSExQX0IxX0NUUkwwCQkoMHgwMTgpCisjZGVmaW5lIEhMUF9CMl9DVFJMMAkJKDB4MDI4KQorI2RlZmluZSBITFBfQjNfQ1RSTDAJCSgweDAzOCkKKworI2RlZmluZSBITFBfQjBfQ1RSTDEJCSgweDAwQykKKyNkZWZpbmUgSExQX0IxX0NUUkwxCQkoMHgwMUMpCisjZGVmaW5lIEhMUF9CMl9DVFJMMQkJKDB4MDJDKQorI2RlZmluZSBITFBfQjNfQ1RSTDEJCSgweDAzQykKKworI2RlZmluZSBQQ0lfQ1NSCQkJKDB4MDA0KQorI2RlZmluZSBQQ0lfUDJPX0JBUjAJCSgweDAxMCkKKyNkZWZpbmUgUENJX1AyT19CQVIwX1VQUEVSCSgweDAxNCkKKyNkZWZpbmUgUENJX1AyT19CQVIyCQkoMHgwMTgpCisjZGVmaW5lIFBDSV9QMk9fQkFSMl9VUFBFUgkoMHgwMUMpCisjZGVmaW5lIFBDSV9QMk9fQkFSMwkJKDB4MDIwKQorI2RlZmluZSBQQ0lfUDJPX0JBUjNfVVBQRVIJKDB4MDI0KQorCisjZGVmaW5lIFBDSV9NSVNDX0NTUgkJKDB4MDQwKQorI2RlZmluZSBQQ0lfUDJPX1BBR0VfU0laRVMJKDB4MDRDKQorCisjZGVmaW5lIFBDSV9QQ0lYX1NUQVQJCSgweDBGNCkKKworI2RlZmluZSBQQ0lfSVJQX1NUQVQJCSgweDE4NCkKKworI2RlZmluZSBQQ0lfUEZBQl9CQVIwCQkoMHgyMDQpCisjZGVmaW5lIFBDSV9QRkFCX0JBUjBfVVBQRVIJKDB4MjA4KQorI2RlZmluZSBQQ0lfUEZBQl9JTwkJKDB4MjBDKQorI2RlZmluZSBQQ0lfUEZBQl9JT19VUFBFUgkoMHgyMTApCisKKyNkZWZpbmUgUENJX1BGQUJfTUVNMzIJCSgweDIxNCkKKyNkZWZpbmUgUENJX1BGQUJfTUVNMzJfUkVNQVAJKDB4MjE4KQorI2RlZmluZSBQQ0lfUEZBQl9NRU0zMl9NQVNLCSgweDIxQykKKworI2RlZmluZSBDR19QTEwwX0NUUkwwCQkoMHgyMTApCisjZGVmaW5lIENHX1BMTDBfQ1RSTDEJCSgweDIxNCkKKyNkZWZpbmUgQ0dfUExMMV9DVFJMMAkJKDB4MjIwKQorI2RlZmluZSBDR19QTEwxX0NUUkwxCQkoMHgyMjQpCisjZGVmaW5lIENHX1BXUlVQX1NUQVRVUwkJKDB4MjM0KQorCisjZGVmaW5lIE1QSUNfQ1NSKG4pICgweDMwQyArIChuICogMHg0MCkpCisKKyNkZWZpbmUgU0RfQ1RSTAkJCSgweDAwMCkKKyNkZWZpbmUgU0RfU1RBVFVTCQkoMHgwMDQpCisjZGVmaW5lIFNEX1RJTUlORwkJKDB4MDA4KQorI2RlZmluZSBTRF9SRUZSRVNICQkoMHgwMEMpCisjZGVmaW5lIFNEX0lOVF9TVEFUVVMJCSgweDAxMCkKKyNkZWZpbmUgU0RfSU5UX0VOQUJMRQkJKDB4MDE0KQorI2RlZmluZSBTRF9JTlRfU0VUCQkoMHgwMTgpCisjZGVmaW5lIFNEX0QwX0NUUkwJCSgweDAyMCkKKyNkZWZpbmUgU0RfRDFfQ1RSTAkJKDB4MDI0KQorI2RlZmluZSBTRF9EMF9CQVIJCSgweDAyOCkKKyNkZWZpbmUgU0RfRDFfQkFSCQkoMHgwMkMpCisjZGVmaW5lIFNEX0VDQ19DVFJMCQkoMHgwNDApCisjZGVmaW5lIFNEX0RMTF9TVEFUVVMJCSgweDI1MCkKKworI2RlZmluZSBUU19TRF9DVFJMX0VOQUJMRQkoMSA8PCAzMSkKKworI2RlZmluZSBQQl9FUlJDU19FUwkJKDEgPDwgMSkKKyNkZWZpbmUgUEJfSVNSX1BCU19SRF9FUlIJKDEgPDwgOCkKKyNkZWZpbmUgUENJX0lSUF9TVEFUX1BfQ1NSCSgxIDw8IDIzKQorCisvKgorICogSTJDIDogUmVnaXN0ZXIgYWRkcmVzcyBvZmZzZXQgZGVmaW5pdGlvbnMKKyAqLworI2RlZmluZSBJMkNfQ05UUkwxCQkoMHgwMDAwMDAwMCkKKyNkZWZpbmUgSTJDX0NOVFJMMgkJKDB4MDAwMDAwMDQpCisjZGVmaW5lIEkyQ19SRF9EQVRBCQkoMHgwMDAwMDAwOCkKKyNkZWZpbmUgSTJDX1RYX0RBVEEJCSgweDAwMDAwMDBjKQorCisvKgorICogSTJDIDogUmVnaXN0ZXIgQml0IE1hc2tzIGFuZCBSZXNldCBWYWx1ZXMKKyAqIGRlZmluaXRpb25zIGZvciBldmVyeSByZWdpc3RlcgorICovCisKKy8qIEkyQ19DTlRSTDEgOiBSZXNldCBWYWx1ZSAqLworI2RlZmluZSBJMkNfQ05UUkwxX1JFU0VUX1ZBTFVFCQkJCSgweDAwMDAwMDBhKQorCisvKiBJMkNfQ05UUkwxIDogUmVnaXN0ZXIgQml0cyBNYXNrcyBEZWZpbml0aW9ucyAqLworI2RlZmluZSBJMkNfQ05UUkwxX0RFVkNPREUJCQkJKDB4MDAwMDAwMGYpCisjZGVmaW5lIEkyQ19DTlRSTDFfUEFHRQkJCQkJKDB4MDAwMDA3MDApCisjZGVmaW5lIEkyQ19DTlRSTDFfQllUQUREUgkJCQkoMHgwMGZmMDAwMCkKKyNkZWZpbmUgSTJDX0NOVFJMMV9JMkNXUklURQkJCQkoMHgwMTAwMDAwMCkKKworLyogSTJDX0NOVFJMMSA6IFJlYWQvV3JpdGUgQml0IE1hc2sgRGVmaW5pdGlvbiAqLworI2RlZmluZSBJMkNfQ05UUkwxX1JXTUFTSwkJCQkoMHgwMWZmMDcwZikKKworLyogSTJDX0NOVFJMMSA6IFVudXNlZC9SZXNlcnZlZCBiaXRzIERlZmluaXRpb24gKi8KKyNkZWZpbmUgSTJDX0NOVFJMMV9SRVNFUlZFRAkJCQkoMHhmZTAwZjhmMCkKKworLyogSTJDX0NOVFJMMiA6IFJlc2V0IFZhbHVlICovCisjZGVmaW5lIEkyQ19DTlRSTDJfUkVTRVRfVkFMVUUJCQkJKDB4MDAwMDAwMDApCisKKy8qIEkyQ19DTlRSTDIgOiBSZWdpc3RlciBCaXRzIE1hc2tzIERlZmluaXRpb25zICovCisjZGVmaW5lIEkyQ19DTlRSTDJfU0laRQkJCQkJKDB4MDAwMDAwMDMpCisjZGVmaW5lIEkyQ19DTlRSTDJfTEFORQkJCQkJKDB4MDAwMDAwMGMpCisjZGVmaW5lIEkyQ19DTlRSTDJfTVVMVElCWVRFCQkJCSgweDAwMDAwMDEwKQorI2RlZmluZSBJMkNfQ05UUkwyX1NUQVJUCQkJCSgweDAwMDAwMTAwKQorI2RlZmluZSBJMkNfQ05UUkwyX1dSX1NUQVRVUwkJCQkoMHgwMDAxMDAwMCkKKyNkZWZpbmUgSTJDX0NOVFJMMl9SRF9TVEFUVVMJCQkJKDB4MDAwMjAwMDApCisjZGVmaW5lIEkyQ19DTlRSTDJfSTJDX1RPX0VSUgkJCQkoMHgwNDAwMDAwMCkKKyNkZWZpbmUgSTJDX0NOVFJMMl9JMkNfQ0ZHRVJSCQkJCSgweDA4MDAwMDAwKQorI2RlZmluZSBJMkNfQ05UUkwyX0kyQ19DTVBMVAkJCQkoMHgxMDAwMDAwMCkKKworLyogSTJDX0NOVFJMMiA6IFJlYWQvV3JpdGUgQml0IE1hc2sgRGVmaW5pdGlvbiAqLworI2RlZmluZSBJMkNfQ05UUkwyX1JXTUFTSwkJCQkoMHgwMDAwMDExZikKKworLyogSTJDX0NOVFJMMiA6IFVudXNlZC9SZXNlcnZlZCBiaXRzIERlZmluaXRpb24gKi8KKyNkZWZpbmUgSTJDX0NOVFJMMl9SRVNFUlZFRAkJCQkoMHhlM2ZjZmVlMCkKKworLyogSTJDX1JEX0RBVEEgOiBSZXNldCBWYWx1ZSAqLworI2RlZmluZSBJMkNfUkRfREFUQV9SRVNFVF9WQUxVRQkJCQkoMHgwMDAwMDAwMCkKKworLyogSTJDX1JEX0RBVEEgOiBSZWdpc3RlciBCaXRzIE1hc2tzIERlZmluaXRpb25zICovCisjZGVmaW5lIEkyQ19SRF9EQVRBX1JCWVRFMAkJCQkoMHgwMDAwMDBmZikKKyNkZWZpbmUgSTJDX1JEX0RBVEFfUkJZVEUxCQkJCSgweDAwMDBmZjAwKQorI2RlZmluZSBJMkNfUkRfREFUQV9SQllURTIJCQkJKDB4MDBmZjAwMDApCisjZGVmaW5lIEkyQ19SRF9EQVRBX1JCWVRFMwkJCQkoMHhmZjAwMDAwMCkKKworLyogSTJDX1JEX0RBVEEgOiBSZWFkL1dyaXRlIEJpdCBNYXNrIERlZmluaXRpb24gKi8KKyNkZWZpbmUgSTJDX1JEX0RBVEFfUldNQVNLCQkJCSgweDAwMDAwMDAwKQorCisvKiBJMkNfUkRfREFUQSA6IFVudXNlZC9SZXNlcnZlZCBiaXRzIERlZmluaXRpb24gKi8KKyNkZWZpbmUgSTJDX1JEX0RBVEFfUkVTRVJWRUQJCQkJKDB4MDAwMDAwMDApCisKKy8qIEkyQ19UWF9EQVRBIDogUmVzZXQgVmFsdWUgKi8KKyNkZWZpbmUgSTJDX1RYX0RBVEFfUkVTRVRfVkFMVUUJCQkJKDB4MDAwMDAwMDApCisKKy8qIEkyQ19UWF9EQVRBIDogUmVnaXN0ZXIgQml0cyBNYXNrcyBEZWZpbml0aW9ucyAqLworI2RlZmluZSBJMkNfVFhfREFUQV9UQllURTAJCQkJKDB4MDAwMDAwZmYpCisjZGVmaW5lIEkyQ19UWF9EQVRBX1RCWVRFMQkJCQkoMHgwMDAwZmYwMCkKKyNkZWZpbmUgSTJDX1RYX0RBVEFfVEJZVEUyCQkJCSgweDAwZmYwMDAwKQorI2RlZmluZSBJMkNfVFhfREFUQV9UQllURTMJCQkJKDB4ZmYwMDAwMDApCisKKy8qIEkyQ19UWF9EQVRBIDogUmVhZC9Xcml0ZSBCaXQgTWFzayBEZWZpbml0aW9uICovCisjZGVmaW5lIEkyQ19UWF9EQVRBX1JXTUFTSwkJCQkoMHhmZmZmZmZmZikKKworLyogSTJDX1RYX0RBVEEgOiBVbnVzZWQvUmVzZXJ2ZWQgYml0cyBEZWZpbml0aW9uICovCisjZGVmaW5lIEkyQ19UWF9EQVRBX1JFU0VSVkVECQkJCSgweDAwMDAwMDAwKQorCisjZGVmaW5lIFRTSTEwOF9JMkNfT0ZGU0VUCTB4NzAwMAkvKiBvZmZzZXQgZm9yIGdlbmVyYWwgdXNlIEkyQyBjaGFubmVsICovCisjZGVmaW5lIFRTSTEwOF9JMkNfU0RSQU1fT0ZGU0VUCTB4NDQwMAkvKiBvZmZzZXQgZm9yIFNQRCBJMkMgY2hhbm5lbCAqLworCisjZGVmaW5lIEkyQ19FRVBST01fREVWQ09ERQkweEEJLyogc3RhbmRhcmQgSTJDIEVFUFJPTSBkZXZpY2UgY29kZSAqLworCisvKiBJMkMgc3RhdHVzIGNvZGVzICovCisKKyNkZWZpbmUgVFNJMTA4X0kyQ19TVUNDRVNTCTAKKyNkZWZpbmUgVFNJMTA4X0kyQ19QQVJBTV9FUlIJMQorI2RlZmluZSBUU0kxMDhfSTJDX1RJTUVPVVRfRVJSCTIKKyNkZWZpbmUgVFNJMTA4X0kyQ19JRl9CVVNZCTMKKyNkZWZpbmUgVFNJMTA4X0kyQ19JRl9FUlJPUgk0CisKKyNlbmRpZgkJLyogX1RTSTEwOF9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliX3BwYy9leHRhYmxlLmMgYi9saWJfcHBjL2V4dGFibGUuYwppbmRleCBkOTJmMTQyLi5mZTg1NmZmIDEwMDY0NAotLS0gYS9saWJfcHBjL2V4dGFibGUuYworKysgYi9saWJfcHBjL2V4dGFibGUuYwpAQCAtMzcsNiArMzcsOCBAQAogICogb24gb3VyIGNhY2hlIG9yIHRsYiBlbnRyaWVzLgogICovCiAKK0RFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCiBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5CiB7CiAJdW5zaWduZWQgbG9uZyBpbnNuLCBmaXh1cDsKQEAgLTU1LDEwICs1NywyMiBAQAogCQlsb25nIGRpZmY7CiAKIAkJbWlkID0gKGxhc3QgLSBmaXJzdCkgLyAyICsgZmlyc3Q7Ci0JCWRpZmYgPSBtaWQtPmluc24gLSB2YWx1ZTsKLQkJaWYgKGRpZmYgPT0gMCkKLQkJCXJldHVybiBtaWQtPmZpeHVwOwotCQllbHNlIGlmIChkaWZmIDwgMCkKKwkJaWYgKG1pZCA+IENGR19NT05JVE9SX0JBU0UpIHsKKwkJLyogZXhjZXB0aW9uIG9jY3VycyBpbiBGTEFTSCwgYmVmb3JlIHUtYm9vdCByZWxvY2F0aW9uLgorCQkgKiBObyByZWxvY2F0aW9uIG9mZnNldCBpcyBuZWVkZWQuCisJCSAqLworCQkJZGlmZiA9IG1pZC0+aW5zbiAtIHZhbHVlOworCQkJaWYgKGRpZmYgPT0gMCkKKwkJCQlyZXR1cm4gbWlkLT5maXh1cDsKKwkJfSBlbHNlIHsKKwkJLyogZXhjZXB0aW9uIG9jY3VycyBpbiBSQU0sIGFmdGVyIHUtYm9vdCByZWxvY2F0aW9uLgorCQkgKiBBIHJlbG9jYXRpb24gb2Zmc2V0IHNob3VsZCBiZSBhZGRlZC4KKwkJICovCisJCQlkaWZmID0gKG1pZC0+aW5zbiArIGdkLT5yZWxvY19vZmYpIC0gdmFsdWU7CisJCQlpZiAoZGlmZiA9PSAwKQorCQkJCXJldHVybiAobWlkLT5maXh1cCArIGdkLT5yZWxvY19vZmYpOworCQl9CisJCWlmIChkaWZmIDwgMCkKIAkJCWZpcnN0ID0gbWlkKzE7CiAJCWVsc2UKIAkJCWxhc3QgPSBtaWQtMTsKQEAgLTc1LDggKzg5LDExIEBACiAKIAkvKiBUaGVyZSBpcyBvbmx5IHRoZSBrZXJuZWwgdG8gc2VhcmNoLiAgKi8KIAlyZXQgPSBzZWFyY2hfb25lX3RhYmxlKF9fc3RhcnRfX19leF90YWJsZSwgX19zdG9wX19fZXhfdGFibGUtMSwgYWRkcik7CisJLyogaWYgdGhlIHNlcmlhbCBwb3J0IGRvZXMgbm90IGhhbmcgaW4gZXhjZXB0aW9uLCBwcmludGYgY2FuIGJlIHVzZWQgKi8KKyNpZiAhZGVmaW5lZChDRkdfU0VSSUFMX0hBTkdfSU5fRVhDRVBUSU9OKQogCWlmIChleF90YWJfbWVzc2FnZSkKIAkJcHJpbnRmKCJCdXMgRmF1bHQgQCAweCUwOGx4LCBmaXh1cCAweCUwOGx4XG4iLCBhZGRyLCByZXQpOworI2VuZGlmCiAJaWYgKHJldCkgcmV0dXJuIHJldDsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L2V0aC5jIGIvbmV0L2V0aC5jCmluZGV4IGNjYTkzOTIuLjQ0MzkwZDIgMTAwNjQ0Ci0tLSBhL25ldC9ldGguYworKysgYi9uZXQvZXRoLmMKQEAgLTUyLDYgKzUyLDcgQEAKIGV4dGVybiBpbnQgcnRsODE2OV9pbml0aWFsaXplKGJkX3QqKTsKIGV4dGVybiBpbnQgc2NjX2luaXRpYWxpemUoYmRfdCopOwogZXh0ZXJuIGludCBza2dlX2luaXRpYWxpemUoYmRfdCopOworZXh0ZXJuIGludCB0c2kxMDhfZXRoX2luaXRpYWxpemUoYmRfdCopOwogZXh0ZXJuIGludCB0c2VjX2luaXRpYWxpemUoYmRfdCosIGludCwgY2hhciAqKTsKIGV4dGVybiBpbnQgbnBlX2luaXRpYWxpemUoYmRfdCAqKTsKIGV4dGVybiBpbnQgdWVjX2luaXRpYWxpemUoaW50KTsKQEAgLTI0OSw2ICsyNTAsOSBAQAogI2lmZGVmIENPTkZJR19OUzgzODJYCiAJbnM4MzgyeF9pbml0aWFsaXplKGJpcyk7CiAjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19UU0kxMDhfRVRIKQorCXRzaTEwOF9ldGhfaW5pdGlhbGl6ZShiaXMpOworI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfUlRMODEzOSkKIAlydGw4MTM5X2luaXRpYWxpemUoYmlzKTsKICNlbmRpZgo=